среда, 14 марта 2018 г.

PowerCLI. Запуск скрипта после завершения всех активных задач.

На форуме VMTN, где я являюсь активным участником, был размещен вопрос "script to call other script when no tasks running in vCenter". Задачка мне показалось интересной, а решение - полезным, я взялся. В результате появилась весьма короткий командлет.

Do {Wait-Event -Timeout 10; Write-Host State: Running} While ((Get-Task).State -eq 'Running'); Script.ps1
Как он работает.
Прежде всего давайте посмотрим как выглядит вывод команды Get-Task
Get-Task

Как видим, выводятся как задачи, запущенные нами, так запущенные системой (vSphere).
Притом задачи отражаются в выводе также и после завершения. 

Мы должны дождаться выполнения всех задач и только после этого запустить какой скрпит/команду. Поэтому используем условие (Get-Task).State -eq 'Running'

В цикле While через заданный промежуток времени (в данном случае 10 секунд)  проверяется статус задач. Если статус Running, то выводится соответствующее сообщение, показывающее что командлет усердно выполняет свою задачу. Как только статус задач изменяется на Success, мы выходим из цикла While, после чего выполняется нужный нам скрипт Script.ps1 (который должен лежать папке, указаной как место жительства скриптов по умолчанию). 
Вот собственно и все.