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

Синтаксис

Wait-Job [[-InstanceId] <Guid[]>] [-Any] [-Timeout <int>] [<CommonParameters>]

Wait-Job [-Job] <Job[]> [-Any] [-Timeout <int>] [<CommonParameters>]

Wait-Job [[-Name] <string[]>] [-Any] [-Timeout <int>] [<CommonParameters>]

Wait-Job [-Id] <Int32[]> [-Any] [-Timeout <int>] [<CommonParameters>]

Wait-Job [-State {<NotStarted> | <Running> | <Completed> | <Failed> | <Stopped> | <Blocked>}] [-Any] [-Timeout <int>] [<CommonParameters>]

Описание

До отображения командной строки командлет Wait-Job ожидает завершения фоновых заданий Windows PowerShell. Можно ожидать завершения одного или всех фоновых заданий и задать максимальное время ожидания.

Командлет Wait-Job можно использовать для получения фоновых заданий, запущенных с использованием командлета Start-Job или параметра AsJob командлета Invoke-Command.

После завершения команд задания командлет Wait-Job отображает командную строку и возвращает объект задания, который можно по конвейеру передать другой команде.

Параметры

-Any

Отображает командную строку (и возвращает объект задания) по завершении любого задания. По умолчанию командлет Wait-Job ожидает завершения всех указанных заданий перед отображением приглашения.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-Id <Int32[]>

Ожидает завершения заданий с указанными идентификаторами.

ID — это целое значение, которое однозначно определяет задание в пределах текущего сеанса. Это значение проще запомнить и ввести, чем InstanceId, но оно уникально только в рамках текущего сеанса. Можно ввести один или несколько идентификаторов (разделенных запятыми). Чтобы найти значение идентификатора задания, введите "Get-Job" без параметров.

Обязательно?

true

Позиция?

1

Значение по умолчанию

Принимать входные данные из конвейера?

true (ByPropertyName)

Принимать подстановочные знаки?

false

-InstanceId <Guid[]>

Ожидает завершения заданий с указанными идентификаторами экземпляров. По умолчанию возвращаются все задания.

Идентификатор экземпляра — это GUID, который однозначно определяет задание на компьютере. Чтобы найти значение идентификатора экземпляра задания, воспользуйтесь командлетом Get-Job.

Обязательно?

false

Позиция?

1

Значение по умолчанию

Принимать входные данные из конвейера?

true (ByPropertyName)

Принимать подстановочные знаки?

false

-Job <Job[]>

Ожидает завершения указанных заданий. Укажите переменную, содержащую объекты заданий, либо введите команду, получающую их. Для передачи объектов заданий в командлет Wait-Job можно также использовать оператор конвейера. По умолчанию командлет Wait-Job ожидает завершения всех заданий, созданных в текущем сеансе.

Обязательно?

true

Позиция?

1

Значение по умолчанию

Принимать входные данные из конвейера?

true (ByValue, ByPropertyName)

Принимать подстановочные знаки?

false

-Name <string[]>

Ожидает завершения заданий с указанным понятным именем.

Обязательно?

false

Позиция?

1

Значение по умолчанию

Принимать входные данные из конвейера?

true (ByPropertyName)

Принимать подстановочные знаки?

false

-State <JobState>

Ожидает завершения заданий с указанным состоянием. Допустимые значения: "NotStarted", "Running", "Completed", "Stopped", "Failed" и "Blocked".

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

true (ByPropertyName)

Принимать подстановочные знаки?

false

-Timeout <int>

Определяет максимальное время ожидания для фонового задания в секундах. В случае значения по умолчанию (-1) ожидается завершение задания, независимо от того, как долго оно будет выполняться. Отсчет времени начинается с отправки команды Wait-Job, а не команды Start-Job.

Если указанное время истекло, цикл ожидания заканчивается и окно командной строки становится активным, даже если задание все еще активно. Сообщение об ошибке не отображается.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

<CommonParameters>

Данный командлет поддерживает общие параметры -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer и -OutVariable. Дополнительные сведения см. в разделе about_Commonparameters.

Ввод и вывод

Входным типом является тип объектов, которые можно передавать командлету по конвейеру. Возвращаемым типом является тип объектов, возвращаемых командлетом.

Входные данные

System.Management.Automation.RemotingJob

Объект задания можно передать командлету Wait-Job по конвейеру.

Выходные данные

System.Management.Automation.RemotingJob

Командлет Wait-Job возвращает объекты заданий, представляющие завершенные задания. Если цикл ожидания заканчивается вследствие превышения времени Timeout, командлет Wait-Job не возвращает никаких объектов.

Пример 1

C:\PS>get-job | wait-job

Описание
-----------
Эта команда ожидает завершения всех фоновых заданий, запущенных в текущем сеансе.






Пример 2

C:\PS>$s = new-pssession server01, server02, server03

C:\PS> invoke-command -session $s -scriptblock {start-job -name Date1 -scriptblock {get-date}}

C:\PS> $done = invoke-command -session $s -command {wait-job -name Date1}

C:\PS> $done.count
3

Описание
-----------
В этом примере показано, как использовать командлет Wait-Job для заданий, запущенных на удаленных компьютерах с помощью командлета Start-Job. Обе команды Start-Job и Wait-Job передаются на удаленный компьютер с помощью командлета Invoke-Command.

В этом примере команда Wait-Job используется для того, чтобы узнать, завершена ли команда Get-Date, выполняющаяся в виде фонового задания на трех разных компьютерах. 

Первая команда создает сеанс Windows PowerShell (PSSession) на каждом из трех удаленных компьютеров и сохраняет их в переменной $s. 

Вторая команда использует командлет Invoke-Command для выполнения команды Start-Job в каждом из трех сеансов, заданных в переменной $s. Все задания имеют имя Date1.

Третья команда использует командлет Invoke-Command для выполнения команды Wait-Job. Эта команда ожидает завершения заданий Date1, запущенных на каждом из компьютеров. Конечная коллекция (массив) объектов заданий сохраняется в переменной $done. 

Четвертая команда использует свойство Count массива объектов заданий, сохраненного в переменной $done, для определения количества завершенных заданий.






Пример 3

C:\PS>$s = new-pssession (get-content machines.txt)  

C:\PS> $c = 'get-eventlog -log system | where {$_.EntryType -eq "error" -and $_.Source -eq "LSASRV"} | out-file errors.txt'

C:\PS> invoke-command -session $s -scriptblock {param($c)start-job -scriptblock {$c}} -ArgumentList $c

C:\PS> invoke-command -session $s -scriptblock {wait-job -any}

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

Первая команда создает сеанс PSSession на каждом из компьютеров, указанных в файле Machines.txt, и сохраняет эти сеансы в переменной $s. Для получения содержимого файла в этой команде используется командлет Get-Content. Команда Get-Content заключена в круглые скобки, чтобы обеспечить ее выполнение до команды New-PSSession.

Вторая команда сохраняет строку команды Get-EventLog (в кавычках) в переменной $c.

Третья команда использует командлет Invoke-Command для выполнения команды Start-Job в каждом из сеансов, указанных в переменной $s. Команда Start-Job запускает фоновое задание, которое выполняет команду, указанную в переменной $c. 

Поскольку переменная $c является локальной, команда использует ключевое слово "param" для объявления локальных переменных в команде и параметр ArgumentList для задания значений этих переменных.

Четвертая команда использует командлет Invoke-Command для выполнения команды Wait-Job в рамках этих сеансов. Она использует командлет Wait-Job для ожидания завершения первого задания на удаленных компьютерах.






Пример 4

C:\PS>$s = new-pssession Server01, Server02, Server03 

C:\PS> $jobs = invoke-command -session $s -scriptblock {start-job -script {get-date}}

C:\PS> $done = invoke-command -session $s -scriptblock {wait-job -timeout 30}

Описание
-----------
В этом примере показано, как использовать параметр Timeout командлета Wait-Job для задания максимального времени ожидания для заданий, запущенных на удаленных компьютерах. 

Первая команда создает сеанс PSSession на каждом из трех удаленных компьютеров (Server01, Server02 и Server03) и сохраняет сеансы в переменной $s. 

Вторая команда использует командлет Invoke-Command для выполнения команды Start-Job в каждом из сеансов, указанных в переменной $s. Она сохраняет конечные объекты заданий в переменной $jobs.

Третья команда использует командлет Invoke-Command для выполнения команды Wait-Job в каждом из сеансов PSSession, указанных в переменной $s. Команда Wait-Job проверяет, все ли команды были завершены в течение 30 секунд. В ней используется параметр Timeout со значением 30 (секунд) для задания максимального времени. Команда сохраняет результаты выполнения команды в переменной $done. 

В данном случае по истечении 30 секунд была завершена только команда на компьютере Server02. Команда Wait-Job заканчивает цикл ожидания, отображает командную строку и возвращает объект, представляющий завершенное задание. 

Переменная $done содержит объект задания, представляющий задание, выполнявшееся на компьютере Server02.






Пример 5

C:\PS>wait-job -id 1,2,5 -any

Описание
-----------
Эта команда определяет три задания с помощью их идентификаторов и дожидается завершения любого из этих заданий. Командная строка отображается по завершении любого задания.






Пример 6

C:\PS>wait-job -name DailyLog -timeout 120

Описание
-----------
Эта команда ожидает завершения задания DailyLog в течение 120 секунд (две минуты). Если задание не завершается в течение двух минут, в любом случае отображается командная строка, а задание продолжает выполняться в фоновом режиме.






Пример 7

C:\PS>wait-job -name Job3

Описание
-----------
В этой команде Wait-Job для указания задания, завершение которого ожидается, используется имя задания.






Пример 8

C:\PS>C:\PS> $j = start-job -script {get-childitem *.ps1| where {$_lastwritetime -gt ((get-date) - (new-timespan -days 7))}}

C:\PS> $j | wait-job

Описание
-----------
В этом примере показано, как использовать командлет Wait-Job для заданий, запущенных на локальном компьютере с помощью командлета Start-Job.

Эти команды запускают задание, которое получает список файлов скриптов Windows PowerShell, добавленных или измененных в течение последней недели.

Первая команда запускает фоновое задание на локальном компьютере с использованием командлета Start-Job. Задание выполняет команду Get-ChildItem, которая получает список всех файлов с расширением PS1, добавленных или измененных в течение последней недели.

Третья команда использует командлет Wait-Job для ожидания завершения задания. По завершении задания команда отображает объект задания, содержащий сведения о задании.






Пример 9

C:\PS>$s = new-pssession Server01, Server02, Server03

C:\PS> $j = invoke-command -session $s -scriptblock {get-process} -asjob

C:\PS> $j | wait-job

Описание
-----------
В этом примере показано, как использовать командлет Wait-Job для заданий, запущенных на удаленных компьютерах с помощью параметра AsJob командлета Invoke-Command. При использовании параметра AsJob задание создается на локальном компьютере, и результаты задания автоматически возвращаются на локальный компьютер, хотя само задание выполняется на удаленных компьютерах.

В этом примере команда Wait-Job используется для того, чтобы узнать, завершена ли команда Get-Process, выполняющаяся в сеансах на трех удаленных компьютерах. 

Первая команда создает сеансы PSSession на трех компьютерах и сохраняет эти сеансы в переменной $s. 

Вторая команда использует командлет Invoke-Command для выполнения команды Get-Process в каждом из трех сеансов PSSession, заданных в переменной $s. В команде используется параметр AsJob для асинхронного выполнения команды в виде фонового задания. Команда возвращает объект задания точно так же, как и для заданий, запущенных с использованием команды Start-Job, а объект задания сохраняется в переменной $j.

Третья команда передает объект задания, содержащийся в переменной $j, в командлет Wait-Job с помощью оператора конвейера (|). Обратите внимание, что в этом случае не требуется использовать команду Invoke-Command, поскольку задание находится на локальном компьютере.






Пример 10

C:\PS>get-job

Id   Name	 State	HasMoreData	 Location			 Command
--   ----	 -----	-----------	 --------			 -------
1	Job1	 Completed  True			localhost,server01.. get-service
4	Job4	 Completed  True			localhost			dir | where

C:\PS> wait-job -id 1

Описание
-----------
Эта команда ожидает завершения задания с идентификатором 1.






См. также