El script de Powershell programado ocasionalmente muere a mitad de camino

El script de Powershell programado ocasionalmente muere a mitad de camino

Tengo algunos scripts de PowerShell programados y, por lo general, se ejecutan bien (tanto como tarea programada como cuando se ejecutan manualmente).

Tengo un problema en el que, en ocasiones, simplemente dejan de funcionar a mitad de un guión.

Uno de mis scripts se ve así:

start-transcript
write-host "Starting!"
foreach($blah in $blahblah)
{
   write-host "    $blah"
}
write-host "Finished"
stop-transcript

Lo extraño es que cuando miro la transcripción veo este patrón:

**********************
Windows PowerShell transcript start
Start time: 20170116055439
Username  : domain\user 
Machine   : PCNAME (Microsoft Windows NT 6.1.7601 Service Pack 1) 
**********************
Transcript started, output file is GetMSOLLicensestoCSVTranscript.txt
Starting!
    blahitem1
    blahitem2
    ...
    blahitem 37675
**********************
Windows PowerShell transcript end
End time: 20170116060001
**********************   

Tenga en cuenta que simplemente se detuvo en medio del ciclo (no se hizo con todos los datos) y tenga en cuenta que nunca se llamó al host de escritura "Terminado".

Lo que encontré interesante fue que PowerShell de alguna manera cerró el archivo de transcripción y escribió las últimas 4 líneas.

Supongo que se está quedando sin memoria, pero no sé cómo saber si eso es realmente lo que está sucediendo.

Se agradecería cualquier consejo para la solución de problemas.

Respuesta1

¿El código dentro del bucle es puro powershell o llama someCrazy.exe? Algunos archivos ejecutables locos escriben en la consola en lugar de en la salida estándar, y ese tipo de error no sería capturado por la transcripción. Puede intentar envolver PowerShell con CMD, que puede capturar ese tipo de texto de error.

CMD.EXE /C "powershell -file c:\your\script.ps1" 2>&1 > c:\temp\cmdWrapper.log

Re: falta "terminado". Stop-transcriptes una forma de finalizar una transcripción. Es probable que el error dentro del bucle esté provocando la salida de PowerShell. La transcripción se detendrá con el mensaje de cierre normal cuando powershell.exefinalice la generación del programador de tareas.

Respuesta2

Ok, entonces la respuesta (vergonzosa) fue que fue un error de mi parte.

En el programador de tareas de Windows, hay varios lugares donde puede establecer un límite de tiempo: uno general que se encuentra en el conjunto principal de pestañas, pero también puede establecer un límite de tiempo para cada tarea que especifique.

Cuando configuro la tarea programada para ejecutar el script diariamente, lo configuro para que se ejecute durante un máximo de 1 hora.

Entonces, si bien la combinación general de todas las tareas podría demorar hasta 4 horas, la subtarea específica que inició PowerShell se limitó a una hora.

Me perdí esto cuando revisé y vi la configuración de 4 horas.

  • Jacobo

información relacionada