2012-04-26 30 views
5

Tengo un bucle foreach dentro de mi secuencia de comandos de powershell con impresiones $ de salida en el shell durante cada iteración. Hay muchas salidas y la cantidad de entradas que el shell puede mostrar es limitada. Estoy buscando exportar la salida a un archivo de texto. Sé cómo hacerlo en línea de comando. ¿Cómo es posible en una poderosa sin embargo?Exportación de la salida de powershell al archivo de texto

FYI, estoy usando un script por lotes desde la línea de comandos para ejecutar el script de PowerShell como

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

Respuesta

12

Siempre se puede redirigir la salida de un archivo EXE a un archivo como tal (incluso desde cmd.exe):

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

Dentro de PowerShell, también puede redirigir los comandos individuales para presentar pero en esos casos es probable que desee añadir al archivo de registro en lugar de sobrescribir por ejemplo:

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

Como puede ver, hacer la redirección dentro del script es un poco molesto porque tiene que hacer muchos redireccionamientos para archivar. OTOH, si solo quieres redirigir parte de la salida a un archivo, entonces tienes más control de esta manera. Otra opción es usar Write-Host para generar información en la consola destinada a alguien que observa los resultados de la ejecución del script. Tenga en cuenta que la salida Write-Host no se puede redirigir a un archivo.

Este es un ejemplo ejecutado desde 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

Así que si estoy teniendo un argumento al script de PowerShell, puedo simplemente do: powershell c: \ test.ps1 c: \ log.log> c: \ test.log donde log.log es el argumento? – ssn

+0

Sí, pero intente utilizar el parámetro '-File', p. 'powershell -file c: \ test.ps1 c: \ log.log> c: \ test.log' –

+0

si intento usar el parámetro de archivo (o sin archivo) en el archivo por lotes obtengo la siguiente línea que se ejecuta en el comando línea: powershell -file c: \ test.ps1 c: \ log.log 1> c: \ test.log No entiendo cómo aparece ese "1" ..... Y supongo que todo el texto después de que el nombre del script se toma como el nombre del archivo de entrada y, por lo tanto, el resultado no es el esperado. Y este comportamiento es el mismo si uso "-file" o no. – ssn

4

¿qué pasa con el 'tee' comando

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

Esto es lo que estaba buscando. Quería mostrar tanto en pantalla como en archivo. ¡Gracias! – Hajjat

Cuestiones relacionadas