예약된 Powershell 스크립트가 중간에 종료되는 경우가 있습니다.

예약된 Powershell 스크립트가 중간에 종료되는 경우가 있습니다.

예약된 몇 가지 Powershell 스크립트가 있으며 일반적으로 정상적으로 실행됩니다(예약된 작업으로, 그리고 수동으로 실행될 때 모두).

가끔씩 스크립트 중간에 작업이 중단되는 문제가 있습니다.

내 스크립트 중 하나는 다음과 같습니다.

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

이상한 점은 성적표를 보면 다음과 같은 패턴이 보인다는 것입니다.

**********************
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
**********************   

루프 중간에 중지되었으며(모든 데이터가 완료되지는 않음) 쓰기 호스트 "Finished"가 호출되지 않았다는 점에 유의하세요.

내가 흥미로웠던 점은 powershell이 ​​여전히 기록 파일을 닫고 마지막 4줄을 썼다는 것입니다.

나는 메모리가 부족하다고 가정하지만 실제로 무슨 일이 일어나고 있는지 알 수는 없습니다.

모든 문제 해결 팁을 주시면 감사하겠습니다.

답변1

루프 내의 코드가 순수 powershell입니까, 아니면 호출입니까 someCrazy.exe? 일부 미친 exe는 표준 출력 대신 콘솔에 쓰기 때문에 그러한 종류의 오류는 기록으로 캡처되지 않습니다. 해당 종류의 오류 텍스트를 캡처할 수 있는 CMD로 powershell을 래핑해 볼 수 있습니다.

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

Re: "완료"가 누락되었습니다. Stop-transcript스크립트를 종료하는 방법 중 하나입니다. 루프 내의 오류로 인해 powershell이 ​​종료될 가능성이 있습니다. powershell.exe작업 스케줄러에 의해 생성된 일반 닫기 메시지와 함께 기록이 중지됩니다 .

답변2

좋아, 그래서 (당황스러운) 대답은 이것이 내 실수였다는 것입니다.

Windows 작업 스케줄러에는 시간 제한을 설정할 수 있는 여러 위치가 있습니다. 하나는 기본 탭 세트에 있지만 지정한 각 작업에 대해 시간 제한을 설정할 수도 있습니다.

스크립트를 매일 실행하도록 예약된 작업을 설정할 때 최대 1시간 동안 실행되도록 설정했습니다.

따라서 모든 작업의 ​​전체 조합에는 최대 4시간이 걸릴 수 있지만 powershell을 실행하는 특정 하위 작업은 1시간으로 제한되었습니다.

4시간 설정을 확인하고 보니 이걸 놓쳤네요.

관련 정보