
Eu tenho alguns scripts do PowerShell agendados e eles geralmente funcionam bem (tanto como uma tarefa agendada quanto quando executados manualmente)
Eu tenho um problema em que, ocasionalmente, eles param de trabalhar no meio de um script.
Um dos meus scripts é assim:
start-transcript
write-host "Starting!"
foreach($blah in $blahblah)
{
write-host " $blah"
}
write-host "Finished"
stop-transcript
O que é estranho é que quando olho para a transcrição vejo este padrão:
**********************
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
**********************
Observe que ele parou no meio do loop (não foi feito com todos os dados) e observe que o host de gravação "Concluído" nunca foi chamado.
O que achei interessante foi que o PowerShell ainda fechou o arquivo de transcrição e escreveu as últimas 4 linhas.
Presumo que esteja ficando sem memória, mas não sei como saber se é realmente isso que está acontecendo.
Qualquer dica de solução de problemas seria apreciada.
Responder1
O código dentro do loop é puro PowerShell ou chamada someCrazy.exe
? Alguns exe malucos gravam no console em vez da saída padrão, e esse tipo de erro não seria capturado pela transcrição. Você pode tentar agrupar o PowerShell com CMD, que pode capturar esse tipo de texto de erro.
CMD.EXE /C "powershell -file c:\your\script.ps1" 2>&1 > c:\temp\cmdWrapper.log
Re: faltando "concluído". Stop-transcript
é uma maneira de encerrar uma transcrição. É provável que o erro no loop esteja causando a saída do PowerShell. A transcrição irá parar com a mensagem de fechamento normal quando powershell.exe
a geração do agendador de tarefas terminar.
Responder2
Ok, então a resposta (embaraçosa) foi que isso foi um erro da minha parte.
No agendador de tarefas do Windows, existem vários locais onde você pode definir um limite de tempo - um geral que está no conjunto principal de guias, mas você também pode definir um limite de tempo para cada tarefa especificada.
Quando configuro a tarefa agendada para executar o script diariamente, defino-a para ser executada por no máximo 1 hora.
Portanto, embora a combinação geral de todas as tarefas pudesse levar até 4 horas, a subtarefa específica que iniciou o PowerShell foi limitada a uma hora.
Perdi isso quando verifiquei e vi a configuração de 4 horas.
- Jack