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

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

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

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

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

person Esuriency    schedule 06.01.2017    source источник
comment
Настроена ли задача для запуска только тогда, когда пользователь вошел в систему?   -  person Ansgar Wiechers    schedule 06.01.2017
comment
У меня установлено значение «Выполнить», независимо от того, вошел ли пользователь в систему или нет.   -  person Esuriency    schedule 06.01.2017
comment
Тогда он не сможет взаимодействовать с рабочим столом текущего пользователя.   -  person Ansgar Wiechers    schedule 07.01.2017


Ответы (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 '[email protected]' -From '[email protected]' -Subject 'Error in script TaskName' -Body "Error $($_.Message) received while running TaskName" -SmtpServer smtp.domain.com
}
person Patrick Meinecke    schedule 06.01.2017
comment
Спасибо, это приятно знать. К сожалению, я не думаю, что смогу работать, когда пользователь вошел в систему, так как наши ИТ регулярно устанавливают обновления и перезагружают компьютеры. Я попробую настроить его на уведомления по электронной почте! - person Esuriency; 06.01.2017