2012-04-26 9 views
5

Ho un ciclo foreach all'interno del mio script PowerShell con stampe $ output sulla shell durante ogni iterazione. Ci sono molte uscite e il numero di voci che la shell può mostrare è limitato. Sto cercando di esportare l'output in un file di testo. So come farlo in linea di comando. Come è possibile in un PowerShell?Esportazione dell'output di PowerShell in un file di testo

FYI, sto usando uno script batch da linea di comando per eseguire lo script PowerShell come

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

risposta

12

È sempre possibile reindirizzare l'output un file EXE in un file in questo modo (anche da cmd.exe):

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

All'interno PowerShell, è anche possibile reindirizzare i comandi individuali di file, ma in questi casi, probabilmente si desidera aggiungere al file di log invece di sovrascrivere esempio:

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

Come puoi vedere, eseguire il reindirizzamento all'interno dello script è un po 'un problema perché devi eseguire molti reindirizzamenti sul file. OTOH, se vuoi solo reindirizzare parte dell'output in un file, allora hai più controllo in questo modo. Un'altra opzione è quella di utilizzare Write-Host per generare informazioni sulla console destinate a qualcuno che osserva i risultati dell'esecuzione dello script. Si noti che l'output Write-Host non può essere reindirizzato al file.

Questo è un esempio eseguito da CMD.exe

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

Quindi, se io sto avendo un argomento allo script PowerShell posso semplicemente do: powershell c: \ test.ps1 c: \ log.log> c: \ test.log dove log.log è l'argomento? – ssn

+0

Sì, ma prova a utilizzare il parametro '-File', ad es. 'powershell -file c: \ test.ps1 c: \ log.log> c: \ test.log' –

+0

se provo a usare il parametro file (o senza file) nel file batch ottengo la riga seguente che viene eseguita nel comando riga: powershell -file c: \ test.ps1 c: \ log.log 1> c: \ test.log Non capisco come quel "1" arrivi lì ..... E credo che l'intero testo dopo che il nome dello script è diventato il nome del file di input e quindi l'output non è quello atteso. E questo comportamento è lo stesso sia che io usi "-file" oppure no. – ssn

4

Cosa succede ad usare il comando 'tee'

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

Questo è quello che stavo cercando. Volevo eseguire l'output su entrambi gli schermi e su file. Grazie! – Hajjat

Problemi correlati