scripts script habilitar ejemplos ejecutar ejecución ejecucion desde como comandos powershell scripting stdout

ejemplos - habilitar scripts powershell windows 10



Cómo redirigir la salida de un PowerShell a un archivo durante su ejecución (10)

Tengo un script de PowerShell para el cual me gustaría redirigir el resultado a un archivo. El problema es que no puedo cambiar la forma en que se llama este script. Entonces no puedo hacer:

./MyScript.ps1 > output.txt

¿Cómo redirecciono el resultado de un script de PowerShell durante su ejecución?


Es posible que desee echar un vistazo al cmdlet Tee-Object . Puede canalizar la salida a Tee y escribirá en la tubería y también en un archivo


Escribe "Cosas para escribir" | Out-File Outputfile.txt -Append


Microsoft ha anunciado en el sitio web de Powershell''s Connections (15/02/2012 a las 4:40 PM) que en la versión 3.0 han extendido la redirección como una solución a este problema.

In PS 3.0, we''ve extended output redirection to include the following streams: Pipeline (1) Error (2) Warning (3) Verbose (4) Debug (5) All (*) We still use the same operators > Redirect to a file and replace contents >> Redirect to a file and append to existing content >&1 Merge with pipeline output

Consulte el artículo de ayuda "about_Redirection" para obtener detalles y ejemplos.

help about_Redirection


Para insertar esto en su script, puede hacerlo así:

Write-Output $server.name | Out-File ''(Your Path)/Servers.txt'' -Append

Eso debería hacer el truco.


Si desea una redirección directa de todos los resultados a un archivo, intente usar *>> :

# You''ll receive standard output for the first command, and an error from the second command. mkdir c:/temp -force *>> c:/my.log ; mkdir c:/temp *>> c:/my.log ;

Como se trata de una redirección directa al archivo, no se enviará a la consola (a menudo útil). Si desea la salida de la consola, combine todas las salidas con *&>1 , y luego canalice con Tee-Object :

mkdir c:/temp -force *>&1 | Tee-Object -Append -FilePath c:/my.log ; mkdir c:/temp *>&1 | Tee-Object -Append -FilePath c:/my.log ; # shorter aliased version mkdir c:/temp *>&1 | tee -Append c:/my.log ;

Creo que estas técnicas son compatibles con Powershell 3.0+, estoy probando en Powershell 5.0.


Supongo que puedes modificar MyScript.ps1 . Luego intenta cambiarlo así:

$( here is your current script ) *>&1 > output.txt

Acabo de probar esto con Powershell 3. Puede usar todas las opciones de redirección como en la respuesta de Nathan Hartley.


Tal vez Start-Transcript funcionaría para usted. Primero deténgalo si ya se está ejecutando, luego inícielo y deténgalo cuando haya terminado.

$ErrorActionPreference="SilentlyContinue" Stop-Transcript | out-null $ErrorActionPreference = "Continue" Start-Transcript -path C:/output.txt -append # do some stuff Stop-Transcript

También puede hacer que esto se ejecute mientras trabaja en cosas y tenerlo guardando sus sesiones de línea de comando para referencia posterior.

EDITAR : si desea suprimir completamente el error al intentar detener una transcripción que no está transcribiendo, puede hacer esto:

$ErrorActionPreference="SilentlyContinue" Stop-Transcript | out-null $ErrorActionPreference = "Continue" # or "Stop"


Una posible solución, si su situación lo permite:

  1. Cambiar el nombre de MyScript.ps1 a TheRealMyScript.ps1
  2. Crea un nuevo MyScript.ps1 que se vea así:

    .TheRealMyScript.ps1> output.txt


./myscript.ps1 | Out-File c:/output.csv

Si quieres hacerlo desde la línea de comandos y no está integrado en el script


powershell "./MyScript.ps1" > test.log