Start-job vs. Invoke-команда -asjob - PullRequest
5 голосов
/ 13 ноября 2009

Я пытаюсь выполнять базовые фоновые задания в PowerShell 2.0 и вижу разные вещи с помощью start-job и invoke-command -asjob.

Если я сделаю это:

start-job -scriptblock {get-process}

Я получаю объект задания, но дочернее задание (которое создается автоматически при запуске задания) всегда имеет JobStateInfo "NotStarted".

это, однако, работает как ожидалось:

invoke-command -scriptblock {get-process} -computer localhost -asjob

Я запустил enable-psremoting .... что-нибудь еще, что мне нужно сделать, чтобы фоновые задания работали?

Ответы [ 2 ]

4 голосов
/ 13 ноября 2009

Первый пример, использующий start-job, не использует HTTP для вызова, а вместо этого использует IPC-канал с WinRM для запуска; таким образом, он не требует административных привилегий. Второй пример с invoke-command требует прав администратора (по умолчанию) и будет подключаться через HTTP и WinRM.

Если честно, я ожидал бы, что второй провалится для большинства людей. Если вы запустите: Receive-Job против идентификатора вызова start-job, вы получите какие-либо сообщения об ошибках?

-Oisin

0 голосов
/ 16 марта 2015

Для получения обновленного JobStateInfo вам необходимо использовать Get-Job и задание, созданное в Start-Job. Однако, если вы используете эту информацию, чтобы увидеть, когда работа закончится, Wait-Job или Receive-Job -wait могут лучше соответствовать вашим потребностям.

Wait-Job просто ждет, пока задание или указанный список заданий не будут завершены, прежде чем двигаться дальше. Receive-Job -wait делает то же самое, но также собирает результаты / выходные данные задания.

...