
У меня есть несколько запланированных скриптов 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-файлы пишут в консоль вместо стандартного вывода, и такого рода ошибки не будут зафиксированы транскриптом. Вы можете попробовать обернуть powershell в CMD, который может зафиксировать такой текст ошибки.
CMD.EXE /C "powershell -file c:\your\script.ps1" 2>&1 > c:\temp\cmdWrapper.log
Re: пропущено "finished". Stop-transcript
- один из способов завершить транскрипт. Вероятно, ошибка в цикле приводит к выходу PowerShell. Транскрипт остановится с обычным сообщением о закрытии, когда powershell.exe
будет порожден планировщиком задач.
решение2
Итак, (неловкий) ответ был таков: это была ошибка с моей стороны.
В планировщике задач Windows есть несколько мест, где можно установить ограничение по времени. Одно из них общее, которое находится на основном наборе вкладок, но также можно установить ограничение по времени для каждой указанной вами задачи.
Когда я настраиваю запланированную задачу для ежедневного запуска скрипта, я устанавливаю его на выполнение в течение максимум 1 часа.
Таким образом, хотя общая совокупность всех задач могла занять до 4 часов, конкретная подзадача, запускающая PowerShell, была ограничена часом.
Я пропустил это, когда проверял и увидел настройку на 4 часа.
- Джек