Сохранение открытого окна PowerShell и планировщика заданий

У меня есть сценарий PowerShell, для которого я выполнял задачу каждый день. Можно ли открыть окно PowerShell (а не закрыть после запуска), чтобы я мог убедиться, что оно работает без ошибок? Когда я планирую с помощью приведенной ниже команды, окно не появляется, поэтому я не могу сказать, действительно ли все это закончилось.

powershell -ExecutionPolicy ByPass -File “Q:\myscript.ps1” -NoExit

Кроме того, внутри самого скрипта у меня есть строка, которая открывает текстовый файл в Блокноте (стенограмма скрипта из Start-Transcript). Когда я запускаю скрипт вручную, он открывает Блокнот, но запланированное задание не выполняется. Есть ли настройка, чтобы открыть это?

$validationPath = "Q:\transcript.txt"
& Notepad $validationPath

1 ответ

Решение

Чтобы работать в интерактивном режиме, вам нужно выбрать " Запускать" только тогда, когда пользователь вошел в систему под опциями безопасности. Из справки по контексту безопасности задачи:

Вы можете указать, что задача должна запускаться, даже если учетная запись, под которой запланировано выполнение задачи, не вошла в систему при ее запуске. Для этого установите переключатель "Выполнить" независимо от того, вошел пользователь в систему или нет. Если выбран этот переключатель, задачи не будут выполняться в интерактивном режиме. Чтобы задача выполнялась в интерактивном режиме, выберите "Выполнять только, когда пользователь вошел в систему".

Тем не менее, если он выполняется как запланированная задача, в большинстве случаев было бы лучше зарегистрировать выходные данные и / или отправить электронное письмо при сбое.

Для регистрации вы можете использовать Start-Transcript, как это:

Start-Transcript -Path ('{0}\TaskName.{1:yyyy-MM-dd}.log' -f $env:temp, (Get-Date))
# Code here
Stop-Transcript

Для уведомлений по электронной почте вы можете использовать Send-MailMessage

try {
    # Code here
} catch {
    Send-MailMessage -To 'errors@domain.com' -From 'alerting@domain.com' -Subject 'Error in script TaskName' -Body "Error $($_.Message) received while running TaskName" -SmtpServer smtp.domain.com
}
Другие вопросы по тегам