PowerShell Consolenausgabe von Fehlermeldungen und Warnungen in eine Datei schreiben

tim1980

Lieutenant
Registriert
Mai 2006
Beiträge
514
Hallo,
ich möchte gerne in Power Shell ein Script erstellen, welches mir sämtliche Ausgaben auf der Console in eine Datei schreibt.

Ziel des Scriptes ist es, automatisiert ausgeschriebene Studenten aus dem Office 365 Portal der Uni zu löschen und im Anschluss eine kleine Logdatei zu bekommen.

Das Script selbst funktioniert soweit, jedoch die Ausgabe in eine Datei nicht, ich bekomme je nach Befehl nur eine leere oder gar keine Datei angelegt.

Import-CSV -Delimiter ';' c:\20122016\loeschung.csv | ForEach-Object { $name = $_.UserPrincipalName Remove-MsolUser -UserPrincipalName $name -force }| export-csv c:\20122016\log.csv

Ich habe es auch schon mit anderen Befehlen probiert, aber mehr als eine leere Datei bekomme ich leider nicht.

Vielleicht kann mir jemand helfen.

Gruß
Tim
 
Hi,

in deinem Beispiel schreibst du die Ausgabe der Schleife in eine CSV Datei. nicht die Ausgabe der einzelnen Befehle im Schleifenkörper.
Ich würde die Infos von innerhalb der Schleife an die Logdatei anhängen.
 
McClane schrieb:
Hi,

in deinem Beispiel schreibst du die Ausgabe der Schleife in eine CSV Datei. nicht die Ausgabe der einzelnen Befehle im Schleifenkörper.
Ich würde die Infos von innerhalb der Schleife an die Logdatei anhängen.

Hallo McClane,
vielen Dank für Deine Antwort.

Wie muss ich das Script ändern, damit ich entsprende Ausgaben in der Logdatei bekomme? Kannst Du mir bitte helfen, ich bin absoluter Neuling in PowerShell und komme nicht wirklich weiter.

Heißt das ich muss die letzte Klammer erst hinter der Ausgabe schließen?

Gruß
Tim
 
Das ist zwar kein Einzeiler mehr, aber ich würde es eher so in der Art machen:

$userlist = Import-CSV -Delimiter ';' -Path 'c:\20122016\loeschung.csv'
$logfile = 'c:\20122016\log.csv'

ForEach ($user in $userlist) {
Try {
Remove-MsolUser -UserPrincipalName $user.UserPrincipalName -force | Out-File -FilePath $logfile -Append
}
Catch {
("Error removing " + $user.UserPrincipalName + ": " + $_.Exception.GetType() + "`n" + $_.Exception.Message) | Out-File -FilePath $logfile -Append
}
}

//edit:
Formatierung mit Tabstops mag das Forum wohl nicht...
 
Hallo Renegade334,
vielen Dank, es wird eine Logdatei erzeugt jedoch leider ohne Inhalt.
Vielleicht hast Du ja noch eine Idee woran es liegt.
 
Remove-MsolUser habe ich nicht auf dem System hier, daher kann ich es nicht genau testen.
Schau mal nach, ob du noch -ErrorAction Stop hinten anfügen kannst, sonst werfen manche Befehle keine Exception (d.h. man würde nie in den Catch Block kommen).

Und laut MSDN hat der Befehl keine Ausgabe. Also musst du den Output auch selber schreiben:

$userlist = Import-CSV -Delimiter ';' -Path 'c:\20122016\loeschung.csv'
$logfile = 'c:\20122016\log.csv'

ForEach ($user in $userlist) {
Try {
Remove-MsolUser -UserPrincipalName $user.UserPrincipalName -force -ErrorAction Stop
"Removed user: " + $user.UserPrincipalName | Out-File -FilePath $logfile -Append
}
Catch {
("Error removing " + $user.UserPrincipalName + ": " + $_.Exception.GetType() + "`n" + $_.Exception.Message) | Out-File -FilePath $logfile -Append
}
}
 
Hey großartig, dass hat funktioniert!
Vielen Dank für Deine Hilfe.

Gruß
Tim
 
Zurück
Oben