Работа с фоновыми процессами через Jobs в Powershell


11 сентября 2019


Работа с фоновыми процессами через Jobs в Powershell

Для работы с процессами в фоновом режиме есть серия команд с существительным 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'

powershell start job

Если Get-Job возвращает только список задач и их статус, то Receive-Job возвращает результат выполнения команды когда она завершена:

Start-Job -Name 'Test Connection' -ScriptBlock {Test-Connection 'fixmypc.ru'}
Get-Job -Id 7 | Receive-Job

Receive-Job Powershell

 После каждого запроса результата они удаляются. Если вы хотите оставить результат нужно добавить ключ 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'

 

...

Теги: #powershell


Популярные тэги
О блоге
Этот блог представляет собой конспекты выученного материала, преобретенного опыта и лучшие практики в системном администрировании и программировании.