Отключает командную строку до завершения выполнения одного или нескольких фоновых заданий 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.
См. также