остановить зацикленный сценарий PowerShell и убить инициированные им удаленные процессы - PullRequest
2 голосов
/ 20 августа 2011

У меня есть скрипт, который запускает удаленное задание с помощью invoke-command -asjob на 20 серверах, чтобы запустить устаревшее приложение командной строки. Для его запуска может потребоваться несколько часов, поэтому я использовал цикл foreach, пока не получу 0 экземпляров (get-job - state running). Внутри цикла я поместил ход выполнения записи, чтобы проинформировать пользователя о том, сколько серверов все еще выполняет этот процесс.

Все работает хорошо, но мне нужно добавить небольшую функцию, чтобы пользователи, запускающие этот сценарий, могли остановить сценарий и убить все запущенные удаленные задания.

Теперь я знаю, как их убить, но я не знаю, как разрешить пользователю возвращать отзыв в мой цикл. Первоначально я думал о появлении кнопки GUI с использованием асинхронного пространства выполнения (как описано здесь http://www.vistax64.com/powershell/16998-howto-create-windows-form-without-stopping-script-processing.html), но похоже, что я не могу выполнять функции в потоке со своим сценарием из потока UI.

Можно ли разрешить моим пользователям останавливать сценарий и уничтожать удаленные процессы?

1 Ответ

2 голосов
/ 20 августа 2011

Вот пример выхода из цикла.

Write-Host "Press 'q' to quit"

while(1){
    if([console]::KeyAvailable){
        $key = [console]::ReadKey($true)
        if($key.Key -eq 'Q') {break}
    }
}

Просто поместите оператор if в ваш цикл.

...