2012-04-26 10 views
5

Ich habe eine foreach-Schleife in meinem Powershell-Skript mit Ausgaben $ Ausgabe auf der Shell während jeder Iteration. Es gibt viele Ausgaben und die Anzahl der Einträge, die die Shell anzeigen kann, ist begrenzt. Ich suche, die Ausgabe in eine Textdatei zu exportieren. Ich weiß, wie man es in der Befehlszeile macht. Wie ist es jedoch in einer Powershell möglich?Exportieren von Powershell-Ausgabe in Textdatei

FYI, ich bin mit einer Batch-Skript von der Kommandozeile des Powershell-Skript auszuführen als

powershell c:\test.ps1 c:\log.log 

Antwort

12

Sie immer der Ausgabe eine exe in eine Datei wie so umleiten (auch von cmd.exe):

powershell c:\test.ps1 > c:\test.log 

Innerhalb Powershell können Sie auch einzelne Befehle umleiten Datei aber in diesen Fällen möchten Sie wahrscheinlich in die Protokolldatei anhängen, anstatt überschreiben zB:

$logFile = 'c:\temp\test.log' 
"Executing script $($MyInvocation.MyCommand.Path)" > $logFile 
foreach ($proc in Get-Process) { 
    $proc.Name >> $logFile 
} 
"Another log message here" >> $logFile 

Wie Sie sehen können, ist die Umleitung innerhalb des Skripts ein wenig mühsam, da Sie viele Weiterleitungen zur Datei vornehmen müssen. OTOH, wenn Sie nur einen Teil der Ausgabe in eine Datei umleiten möchten, haben Sie auf diese Weise mehr Kontrolle. Eine andere Option ist die Verwendung von Write-Host, um Informationen an die Konsole auszugeben, die für jemanden gedacht sind, der die Ergebnisse der Skriptausführung beobachtet. Beachten Sie, dass die Ausgabe Write-Host nicht in Datei umgeleitet werden kann.

Dies ist ein Beispiel von cmd.exe ausgeführt

C:\Temp>type test.ps1 
$OFS = ', ' 
"Output from $($MyInvocation.MyCommand.Path). Args are: $args" 

C:\Temp>powershell.exe -file test.ps1 1 2 a b > test.log 

C:\Temp>type test.log 
Setting environment for using Microsoft Visual Studio 2008 Beta2 x64 tools. 
Output from C:\Temp\test.ps1. Args are: 1, 2, a, b 
+1

Also, wenn ich an den Powershell-Skript ein Argument habe, kann ich einfach nur do: Powershell c: \ test.ps1 c: \ Protokoll.log> c: \ test.log wo log.log ist das Argument? – ssn

+0

Ja, aber versuchen Sie es mit dem '-File' Parameter, z. 'powershell -datei c: \ test.ps1 c: \ log.log> c: \ test.log' –

+0

Wenn ich versuche, Dateiparameter (oder ohne Datei) in der Batch-Datei zu verwenden, erhalte ich die folgende Zeile, die im Befehl ausgeführt wird Zeile: Powershell-Datei c: \ test.ps1 c: \ log.log 1> c: \ test.log Ich verstehe nicht, wie das "1" kommt da ..... Und ich denke, der ganze Text Nachdem der Name des Skripts als Name der Eingabedatei genommen wurde, entspricht die Ausgabe nicht den Erwartungen. Und dieses Verhalten ist das gleiche, ob ich "Datei" verwende oder nicht. – ssn

4

was ist der Befehl ‚T-Shirts‘ mit

C:\ipconfig | tee C:\log.txt 
+0

Das ist, was ich gesucht habe. Ich wollte sowohl auf den Bildschirm als auch auf die Datei ausgeben. Vielen Dank! – Hajjat

Verwandte Themen