Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Возврат кода ошибки из Powershell скрипта в Task Scheduler

Ответить
Настройки темы
PowerShell - [решено] Возврат кода ошибки из Powershell скрипта в Task Scheduler

Новый участник


Сообщения: 14
Благодарности: 2


Конфигурация

Профиль | Отправить PM | Цитировать


Добрового времени суток, господа автоматизирующие.
Есть у меня PowerShell скрипты, автоматизирующие некоторые действия в моей системе (Windows 10) посредством запуска из планировщика заданий (Task Scheduler) по расписанию и по некоторым триггерам. Проблема состоит в том, что после каждого их выполнения задача висит со статусом "Работает" даже, если скрипт свои задачи выполнил. Вопрос в том, как вернуть код ошибки из скрипта, если он вызывается планировщиком заданий.
К примеру, эффекта не даёт ни return, ни exit.

Код: Выделить весь код
return 0; // или 0x0
// или
exit 0; // или 0x0
Ниже представлен один из моих скриптов. Конкретно этот перезагружает видео драйвер Intel HD Graphics после разблокировки экрана.

Код: Выделить весь код
Add-Type -AssemblyName System.Threading

$intelVideoDriver = Get-PnpDevice | where { $_.Name -like "Intel(R) HD Graphics 4000" }
Disable-PnpDevice $intelVideoDriver.DeviceID -Confirm:$false
[System.Threading.Thread]::Sleep(2000)
Enable-PnpDevice $intelVideoDriver.DeviceID -Confirm:$false

New-BurntToastNotification -Text "System maintenanace", 'Intel HD 4000 reloaded'

Отправлено: 15:39, 02-02-2019

 

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Для начала проверить, что запускается скрипт и корректно завершается:

Код: Выделить весь код
$null = New-Item C:\Temp -Type Directory
Get-Date > C:\Temp\run.txt
PS. Запускать с параметрами:
Код: Выделить весь код
PowerShell.exe -ExecutionPolicy ByPass -File C:\Scripts\script.ps1

Или добавить логгирование в свой скрипт, на каком этапе останавливается:

Код: Выделить весь код
$log = "C:\test\log.txt"
"Start" >>$log
Add-Type -AssemblyName System.Threading

$intelVideoDriver = Get-PnpDevice | where { $_.Name -like "Intel(R) HD Graphics 4000" }
Disable-PnpDevice $intelVideoDriver.DeviceID -Confirm:$false
"Disable" >>$log
[System.Threading.Thread]::Sleep(2000)
"Sleep" >>$log
Enable-PnpDevice $intelVideoDriver.DeviceID -Confirm:$false
"Enable" >>$log

New-BurntToastNotification -Text "System maintenanace", 'Intel HD 4000 reloaded'
"Message" >>$log
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:27, 02-02-2019 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 14
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Kazun:
Для начала проверить, что запускается скрипт и корректно завершается »
Скрипт работает и завершается корректно, так как я проверял его работу в PoserShell ISE.

Отправлено: 16:30, 02-02-2019 | #3


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Цитата mycatshoegazer:
Конфигурация
Профиль | Отправить PM | Цитировать | Сообщить модератору
Цитата Kazun:
Для начала проверить, что запускается скрипт и корректно завершается »
Скрипт работает и завершается корректно, так как я проверял его работу в PoserShell ISE. »
Причем тут PowerShell ISE? Скрипт запускается через Task Scheduler и в PowerShell.exe , поэтому надо проверять именно там.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:34, 02-02-2019 | #4


Новый участник


Сообщения: 14
Благодарности: 2

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: png Конфигурация задачи.png
(16.0 Kb, 3 просмотров)

Цитата Kazun:
Скрипт запускается через Task Scheduler и в PowerShell.exe , поэтому надо проверять именно там. »
Так, я проверил работу через Task Scheduler. Задача так и висит в статусе "Работает", папка Temp с содержимым run.txt не появилась. Во вложении я оставил настройки запуска задачи.

Отправлено: 17:01, 02-02-2019 | #5


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Значит запуск скрипта не происходит, проверять аргументы для задачи:
Код: Выделить весь код
-NoProfile -ExecutionPolicy ByPass -File C:\Scripts\script.ps1

Отправлено: 17:10, 02-02-2019 | #6


Новый участник


Сообщения: 14
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Kazun:
Значит запуск скрипта не происходит, проверять аргументы для задачи »
Запустил скрипт дополнительно с параметром -NoProfile в планировщике. Теперь папка и файл корректно создаются, но статус задачи висит "Работает".

Отправлено: 17:47, 02-02-2019 | #7


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Цитата mycatshoegazer:
Запустил скрипт дополнительно с параметром -NoProfile в планировщике. Теперь папка и файл корректно создаются, но статус задачи висит "Работает". »
F5 пробовали нажимать для обновления статуса задачи?

Отправлено: 17:49, 02-02-2019 | #8


Новый участник


Сообщения: 14
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Kazun:
F5 пробовали нажимать для обновления статуса задачи? »
Да, действительно статус возвращается в нормальное состояние. Большое спасибо за помощь!

Ещё вопрос имеется. А как всё таки возвращать из скрипта коды ошибки чтобы их потом можно было мониторить? Для классических приложений, к примеру, в Си-подобных языках и вообще приложениях уровня системы мы просто возвращаем код ошибки из главной функции.

Отправлено: 18:02, 02-02-2019 | #9


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Exit $LASTEXITCODE или задать свой код ошибки
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:39, 03-02-2019 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Возврат кода ошибки из Powershell скрипта в Task Scheduler

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Импорт задачи в Task Scheduler при помощи скрипта. i-Lex Скриптовые языки администрирования Windows 4 20-12-2012 19:15
CMD/BAT - Batch в Scheduler Task Endy1 Скриптовые языки администрирования Windows 18 15-10-2012 10:32
Advanced Task Scheduler Professional 2.0.0.503 OSZone Software Новости программного обеспечения 0 18-03-2010 10:30
Advanced Task Scheduler 2.0.502 OSZone Software Новости программного обеспечения 0 22-12-2009 16:30
Прочие - Advanced Task Scheduler Diam0nd Программное обеспечение Windows 1 24-04-2007 21:29




 
Переход