Wait-Job
Ожидает, пока одно или все задания PowerShell, выполняемые в сеансе, не перейдут в завершающее состояние.
Синтаксис
SessionIdParameterSet (по умолчанию)
Wait-Job
[-Id] <Int32[]>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
JobParameterSet
Wait-Job
[-Job] <Job[]>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
NameParameterSet
Wait-Job
[-Name] <String[]>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
InstanceIdParameterSet
Wait-Job
[-InstanceId] <Guid[]>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
StateParameterSet
Wait-Job
[-State] <JobState>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
FilterParameterSet
Wait-Job
[-Filter] <Hashtable>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
Описание
Командлет Wait-Job ожидает завершения задания перед продолжением выполнения.
Конечные состояния:
- Завершено
- Неудача
- Остановился
- Подвешенный
- Отключен
Вы можете ждать, пока указанное задание или все задания перейдут в состояние завершения. Можно также задать максимальное время ожидания задания с помощью параметра Timeout или использовать параметр Force для ожидания задания в состояниях Suspended или Disconnected.
Когда команды в задании завершены, Wait-Job возвращает объект задания и продолжает выполнение.
Командлет Wait-Job можно использовать для ожидания завершения заданий, которые были запущены с помощью командлета Start-Job или параметра AsJob командлета Invoke-Command. Для получения дополнительной информации о заданиях смотрите раздел about_Jobs.
Начиная с Windows PowerShell 3.0, командлет Wait-Job также ожидает пользовательских типов заданий, таких как задания рабочего процесса и экземпляры запланированных заданий. Чтобы разрешить Wait-Job ожидать задания определенного типа, импортируйте модуль, поддерживающий пользовательский тип задания, в сеанс перед запуском командлета Get-Job, либо используя командлет Import-Module, либо использовав или добавив командлет из модуля. Сведения о конкретном пользовательском типе задания см. в документации по функции пользовательского типа задания.
Примеры
Пример 1: Ожидать выполнения всех заданий
Get-Job | Wait-Job
Эта команда ждёт завершения всех заданий, выполняемых в сеансе.
Пример 2. Ожидание заданий, запущенных на удаленных компьютерах с помощью Start-Job
$s = New-PSSession Server01, Server02, Server03
Invoke-Command -Session $s -ScriptBlock {Start-Job -Name Date1 -ScriptBlock {Get-Date}}
$done = Invoke-Command -Session $s -Command {Wait-Job -Name Date1}
$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. Определение завершения первого задания
$s = New-PSSession -ComputerName (Get-Content -Path .\Machines.txt)
$c = 'Get-EventLog -LogName System | Where-Object {$PSItem.EntryType -eq "error" --and $PSItem.Source -eq "LSASRV"} | Out-File -FilePath Errors.txt'
Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {$Using:c}
Invoke-Command -Session $s -ScriptBlock {Wait-Job -Any}
В этом примере используется параметр AnyWait-Job, чтобы определить, когда первое из многих заданий, выполняемых в текущем сеансе, находится в состоянии завершения. Кроме того, показано, как использовать командлет Wait-Job для ожидания завершения удаленных заданий.
Первая команда создает PSSession на каждом из компьютеров, перечисленных в файле Machines.txt, и сохраняет объекты PSSession в переменной $s. Команда использует командлет Get-Content для получения содержимого файла. Команда Get-Content заключена в скобки, чтобы убедиться, что она выполняется перед командой New-PSSession.
Вторая команда сохраняет строку команды Get-EventLog в кавычках в переменной $c.
Третья команда использует командлет Invoke-Command для выполнения Start-Job в каждом сеансе в $s.
Команда Start-Job запускает задание, которое запускает команду Get-EventLog в переменной $c.
Команда использует модификатор области Using:, чтобы указать, что переменная $c была определена на локальном компьютере. Модификатор области Using: представлен в Windows PowerShell 3.0. Дополнительные сведения о модификаторе Using: области см. в about_Remote_Variables.
Четвертая команда использует Invoke-Command для выполнения команды Wait-Job в сеансах. Он использует параметр Any, чтобы ждать состояния завершения первого задания на удаленных компьютерах.
Пример 4. Установить время ожидания для задач на удаленных компьютерах
PS> $s = New-PSSession -ComputerName Server01, Server02, Server03
PS> $jobs = Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {Get-Date}}
PS> $done = Invoke-Command -Session $s -ScriptBlock {Wait-Job -Timeout 30}
PS>
В этом примере показано, как использовать параметр TimeoutWait-Job, чтобы задать максимальное время ожидания заданий, выполняемых на удаленных компьютерах.
Первая команда создает PSSession на каждом из трех удаленных компьютеров (Server01, Server02 и Server03), а затем сохраняет объекты PSSession в переменной $s.
Вторая команда использует Invoke-Command для выполнения Start-Job в каждом из объектов PSSession в $s. Он сохраняет результирующий объект задания в переменной $jobs.
Третья команда использует Invoke-Command для выполнения Wait-Job в каждом из сеансов в $s. Команда Wait-Job определяет, выполняются ли все команды в течение 30 секунд. Он использует параметр Timeout со значением 30, чтобы установить максимальное время ожидания, а затем сохраняет результаты команды в переменной $done.
В этом случае после 30 секунд выполняется только команда на компьютере Server02.
Wait-Job завершает ожидание, возвращает объект, представляющий завершенное задание и отображает командную строку.
Переменная $done содержит объект задания, представляющий задание, запущенное на сервере Server02.
Пример 5. Дождитесь завершения одного из нескольких заданий
Wait-Job -Id 1, 2, 5 -Any
Эта команда идентифицирует три задания по их идентификаторам и ожидает, пока одно из них не будет в состоянии завершения. Выполнение продолжается после завершения первого задания.
Пример 6: Подождите некоторое время, затем дайте заданию продолжить выполнение в фоновом режиме.
Wait-Job -Name "DailyLog" -Timeout 120
Эта команда ожидает 120 секунд (две минуты) для завершения задания DailyLog. Если задание не завершится в течение следующих двух минут, выполнение продолжается, а задание продолжает выполняться в фоновом режиме.
Пример 7. Ожидание задания по имени
Wait-Job -Name "Job3"
Эта команда использует имя задания для идентификации задания, для которого требуется ждать.
Пример 8. Ожидание заданий на локальном компьютере, запущенных с Start-Job
$j = Start-Job -ScriptBlock {Get-ChildItem -Filter *.ps1 | Where-Object {$PSItem.LastWriteTime -gt ((Get-Date) - (New-TimeSpan -Days 7))}}
$j | Wait-Job
В этом примере показано, как использовать командлет Wait-Job с заданиями, запущенными на локальном компьютере, с помощью Start-Job.
Эти команды запускают задание, которое получает файлы скриптов Windows PowerShell, которые были добавлены или обновлены на прошлой неделе.
Первая команда использует Start-Job для запуска задания на локальном компьютере. Задание выполняет команду Get-ChildItem, которая получает все файлы с расширением имени файла .ps1, которые были добавлены или обновлены на прошлой неделе.
Третья команда использует Wait-Job, чтобы дождаться, когда задание перейдет в завершающее состояние. По завершении задания команда отображает объект задания, содержащий сведения о задании.
Пример 9. Ожидание заданий, запущенных на удаленных компьютерах с помощью Invoke-Command
$s = New-PSSession -ComputerName Server01, Server02, Server03
$j = Invoke-Command -Session $s -ScriptBlock {Get-Process} -AsJob
$j | Wait-Job
С помощью параметра Wait-JobAsJob в этом примере показано, как использовать Invoke-Command с заданиями, запущенными на удаленных компьютерах. При использовании AsJobзадание создается на локальном компьютере и результаты автоматически возвращаются на локальный компьютер, даже если задание выполняется на удаленных компьютерах.
В этом примере используется Wait-Job для определения того, находится ли команда Get-Process, выполняемая в сеансах на трех удаленных компьютерах, в завершающем состоянии.
Первая команда создает объекты PSSession на трех компьютерах и сохраняет их в переменной $s.
Вторая команда использует Invoke-Command для запуска Get-Process в каждом из трех сеансов, проходящих в $s.
Команда использует параметр AsJob для асинхронного выполнения команды в качестве задания. Команда возвращает объект задания так же, как задания, запущенные с помощью Start-Job, и объект задания хранится в переменной $j.
Третья команда использует оператор конвейера (|) для отправки объекта задания из $j в командлет Wait-Job. В этом случае команда Invoke-Command не требуется, так как задание находится на локальном компьютере.
Пример 10: Ожидание выполнения задания с идентификатором
Get-Job
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 Job1 Completed True localhost,Server01.. Get-Service
4 Job4 Completed True localhost dir | where
Wait-Job -Id 1
Эта команда ожидает задания со значением идентификатора 1.
Параметры
-Any
Указывает, что этот командлет возвращает объект задания и продолжает выполнение при завершении любого задания. По умолчанию Wait-Job ожидает завершения всех указанных заданий перед отображением запроса.
Свойства параметра
| Тип: | SwitchParameter |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
(All)
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-Filter
Задает хэш-таблицу условий. Этот командлет ожидает задач, удовлетворяющих всем условиям в хэш-таблице. Введите хеш-таблицу, в которой ключи являются свойствами задания, а значения — значениями свойств задания.
Этот параметр работает только в пользовательских типах заданий, таких как задания рабочего процесса и запланированные задания. Он не применяется к стандартным заданиям, таким как созданные с помощью командлета Start-Job. Сведения о поддержке этого параметра см. в разделе справки для типа задания.
Этот параметр появился в Windows PowerShell 3.0.
Свойства параметра
| Тип: | Hashtable |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
FilterParameterSet
| Position: | 0 |
| Обязательно: | True |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | True |
| Значение из оставшихся аргументов: | False |
-Force
Указывает, что этот командлет продолжает ожидать заданий в состояниях "Приостановлено" или "Отключено". По умолчанию Wait-Job возвращает или заканчивает ожидание, когда задания находятся в одном из следующих состояний:
- Завершено
- Неудача
- Остановился
- Подвешенный
- Отключен
Этот параметр появился в Windows PowerShell 3.0.
Свойства параметра
| Тип: | SwitchParameter |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
(All)
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-Id
Задает массив идентификаторов заданий, для которых этот командлет ожидает.
Идентификатор — это целое число, которое однозначно идентифицирует задание в текущем сеансе. Запоминать и вводить его проще, чем идентификатор экземпляра, но он уникален только в текущем сеансе. Можно ввести один или несколько идентификаторов, разделенных запятыми. Чтобы найти идентификатор задания, введите Get-Job.
Свойства параметра
| Тип: | Int32[] |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
SessionIdParameterSet
| Position: | 0 |
| Обязательно: | True |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | True |
| Значение из оставшихся аргументов: | False |
-InstanceId
Задает массив идентификаторов экземпляров заданий, для которых этот командлет ожидает. Значение по умолчанию — все задания.
Идентификатор экземпляра — это GUID, который однозначно идентифицирует задание на компьютере. Чтобы найти идентификатор экземпляра задания, используйте Get-Job.
Свойства параметра
| Тип: | Guid[] |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
InstanceIdParameterSet
| Position: | 0 |
| Обязательно: | True |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | True |
| Значение из оставшихся аргументов: | False |
-Job
Указывает задания, для которых ожидается этот командлет. Введите переменную, содержащую объекты задания или команду, которая получает объекты задания. Также можно использовать оператор конвейера для отправки объектов заданий в командлет Wait-Job. По умолчанию Wait-Job ожидает всех заданий, созданных в текущем сеансе.
Свойства параметра
| Тип: | Job[] |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
JobParameterSet
| Position: | 0 |
| Обязательно: | True |
| Значение из конвейера: | True |
| Значение из конвейера по имени свойства: | True |
| Значение из оставшихся аргументов: | False |
-Name
Задает понятные имена задач, для которых этот командлет ждет.
Свойства параметра
| Тип: | String[] |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
NameParameterSet
| Position: | 0 |
| Обязательно: | True |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | True |
| Значение из оставшихся аргументов: | False |
-State
Указывает состояние задания. Этот командлет ожидает выполнения только заданий в указанном состоянии. Допустимые значения для этого параметра:
- Не начато
- Бег
- Завершено
- Неудача
- Остановился
- Заблокировано
- Подвешенный
- Отключен
- Приостановка
- Остановка
Дополнительные сведения о состояниях заданий см. в перечисления JobState.
Свойства параметра
| Тип: | JobState |
| Default value: | None |
| Допустимые значения: | NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
StateParameterSet
| Position: | 0 |
| Обязательно: | True |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | True |
| Значение из оставшихся аргументов: | False |
-Timeout
Указывает максимальное время ожидания каждого задания в секундах. Значение по умолчанию -1 указывает, что командлет ожидает завершения задания. Время начинается при отправке команды Wait-Job, а не команды Start-Job.
Если это время превышено, ожидание заканчивается и выполнение продолжается, даже если задание по-прежнему выполняется. Команда не отображает сообщение об ошибке.
Свойства параметра
| Тип: | Int32 |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
| Aliases: | TimeoutSec |
Наборы параметров
(All)
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
CommonParameters
Этот командлет поддерживает общие параметры: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction и -WarningVariable. Дополнительные сведения см. в разделе about_CommonParameters.
Входные данные
System.Management.Automation.RemotingJob
Объект задания можно передать в этот командлет.
Выходные данные
System.Management.Automation.PSRemotingJob
Этот командлет возвращает объекты заданий, представляющие задания в завершающем состоянии. Если ожидание заканчивается, так как значение параметра timeout превышено, Wait-Job не возвращает объекты.
Примечания
PowerShell включает следующие псевдонимы для Wait-Job:
- Все платформы:
wjb
По умолчанию Wait-Job возвращает или заканчивает ожидание, когда задания находятся в одном из следующих состояний:
- Завершено
- Неудача
- Остановился
- Подвешенный
- Отключен
Чтобы направить Wait-Job для продолжения ожидания приостановленных и отключенных заданий, используйте параметр Force.