tiempo tarea script programar programada para ejemplos ejecutar desde crear como cierto cada bat automatizar powershell scheduled-tasks line-endings

powershell - programar - script para crear tarea programada



¿Cómo redirigir la salida de PowerShell cuando se ejecuta desde el Programador de tareas? (8)

Cuando ejecuto un script simple de powershell desde el Programador de tareas, me gustaría redirigir el resultado a un archivo.

Aquí hay un hilo largo sobre este tema, pero no está claro si llegaron a la solución más adecuada al final. Me interesa si alguien en SO también ha resuelto este problema y cómo lo hicieron.


Aquí está el comando que funcionó para mí. No me gustó la idea de redirigir el resultado en el script, ya que dificultaría la ejecución manual.

powershell -windowstyle minimized -c "powershell -c ./myscript.ps1 -verbose >> //server/myscript.log 2>&1"


Enviar esto a la pantalla y registrarlo en un archivo tomó un tiempo para resolver esto, por lo que este hilo parecía el lugar más adecuado para ponerlo

something your doing -Verbose 4>&1|Tee-Object "C:/logs/verb.log" -Append


Lo siguiente funciona para mí en Windows 7:

powershell -command c:/temp/pscript.ps1 2>&1 > c:/temp/apickles.log

En el programador de tareas win7 gui:

program = "Powershell" arguments = "-command c:/temp/pscript.ps1 2>&1 > c:/temp/apickles.log"

Tenga en cuenta que "-file" no funciona porque todos los parámetros posteriores al nombre del archivo se interpretan como parámetros del archivo. Tenga en cuenta que "2> & 1" también redirige la salida de error al archivo de registro. Las versiones posteriores de powershell hacen esto de una manera ligeramente diferente.


Me doy cuenta de que esto ha sido respondido un par de veces, pero una combinación de todas las respuestas anteriores realmente me ayudó ...

Mi problema era que necesitaba ejecutar un script de Powershell sobre WinRM como parte de un proveedor de Packer y seguía fallando debido a problemas de derechos. La forma de evitar esto es ejecutarlo como una tarea programada, pero necesitaba pasar argumentos al script y obtener también el resultado para confirmar que todo pasó.

Este fragmento funcionó bien para mí:

# Generate a Unique ID for this execution $guid = [guid]::NewGuid() $logFile = "c:/Windows/Temp/$guid.log" $argument = "-NoProfile -ExecutionPolicy unrestricted -Command ""& {""$ScriptPath"" $ScriptArgs} 2>&1 > $logFile""" $a = New-ScheduledTaskAction -Execute "powershell.exe" -Argument $argument Register-ScheduledTask -TaskName $TaskName -RunLevel Highest -User $username -Password $password -Action $a | Start-ScheduledTask do{ Start-Sleep -Seconds 30 $task = Get-ScheduledTask -TaskName $TaskName } while ($task.State -eq 4)

El script completo se puede encontrar aquí:

https://gist.github.com/dev-rowbot/fa8b8dadf1b3731067a93065db3e1bba


Powershell 3 en wards permite redireccionar secuencias individuales (out, verbose, error). Sin embargo, el Programador de tareas no los entiende. Es el powershell que hace la redirección.

La solución de @cmcginty funciona a medias, dado que el powershell está invocando el powershell, solo admite solo streams estándar (error, out). Si quieres usar todos los extractos, debes usar

Programa o secuencia de comandos: C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe

Argumento: -windowstyle minimized –NonInteractive –NoProfile -c "powershell -c path_to_ps1.ps1 4>>verbose.log 5>>debug.log"

Comience path_to_ps1 : path_to_ps1


Sería más fácil usar Start-Transcript para iniciar sesión directamente en un archivo:

# Get script name $ScriptFullPath = $MyInvocation.MyCommand.Path # Start logging stdout and stderr to file Start-Transcript -Path "$ScriptFullPath.log" -Append [Some powershell commands] # Stop logging Stop-Transscript

El archivo de registro estará en el mismo directorio que el script.


Uso la función Transcripción para ayudar con esto. Simplemente inclúyalo en su código y muestra todo (sería) el contenido de la pantalla en un archivo de registro.

Start-Transcript -path $LogFile -append <body of script> Stop-Transcript


Yo debería hacer: crear una función para llamar a su script y redirigir el resultado de esta función de esta manera:

.ps1:

function test{ #your simple script commands ls c:/temp -Filter *.JPG ls z:/ #non existent dir } test *> c:/temp/log.txt

Aquí está el archivo de registro :

Répertoire : C:/temp Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 07/06/2008 11:06 176275 HPIM1427.JPG -a--- 07/06/2008 11:06 69091 HPIM1428.JPG -a--- 07/06/2008 11:06 174661 HPIM1429.JPG ls : Lecteur introuvable. Il n''existe aucun lecteur nommé « z ». Au caractère C:/temp/test.ps1:14 : 1 + ls z:/ #non existent dir + ~~~~~~ + CategoryInfo : ObjectNotFound: (z:String) [Get-ChildItem], Driv eNotFoundException + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.GetC hildItemCommand

Puede controlar qué desea generar con los nuevos operadores de redirección de V3:

Do-Something 3> warning.txt # Writes warning output to warning.txt Do-Something 4>> verbose.txt # Appends verbose.txt with the verbose output Do-Something 5>&1 # Writes debug output to the output stream Do-Something *> out.txt # Redirects all streams (output, error, warning, verbose, and debug) to out.txt