Для работы с процессами в фоновом режиме есть серия команд с существительным Job в Powershell. Для того что бы увидеть все команды этого типа нужно выполнить команду:
Get-Command -Noun Job
Весь список команд такой:
- Debug-Job - отладка процессов
- Get-Job - получение списка задач
- Receive-Job - получение результатов выполненного процесса
- Resume-Job - восстановление работы процесса
- Start-Job - запуск процесса
- Stop-Job - остановка процесса
- Suspend-Job - приостановка работы
- Wait-Job - ожидание вывода команды
Кроме этого в некоторых командах есть ключ -AsJob, который запустит процесс в фоне.
Для запуска процесса достаточно указать только скрипт, который мы хотим выполнить в фоне, но я указываю и имя для более ясного понимания задачи:
Start-Job -Name 'Test Connection' -ScriptBlock {Test-Connection 'fixmypc.ru'}
Получить список выполненных команд Powershell можно либо по имени, либо списком обо всех сразу:
Get-Job -Name 'Test Connection'
Если Get-Job возвращает только список задач и их статус, то Receive-Job возвращает результат выполнения команды когда она завершена:
Start-Job -Name 'Test Connection' -ScriptBlock {Test-Connection 'fixmypc.ru'}
Get-Job -Id 7 | Receive-Job
После каждого запроса результата они удаляются. Если вы хотите оставить результат нужно добавить ключ Keep:
Receive-Job -Name 'Test Connection' -Keep
Ниже пример запуска удаленной команды в фоне, но с использованием ключа AsJob:
Invoke-Command -ComputerName 'localhost' -ScriptBlock {Get-Process} -AsJob
Что бы у вас работали такие команды может понадобится настроить сервисы связанные с удаленными командами Powershell.
После получения результатов удаляется только их вывод, что бы удалить саму задачу нужно использовать другую команду:
Remove-Job -Id 3
Следующая команда будет ожидать завершения работы процесса:
Wait-Job -Name 'Test Jobs'
...
Подписывайтесь на наш Telegram канал
Теги: #powershell