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:
- Cambiar el nombre de MyScript.ps1 a TheRealMyScript.ps1
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