Wait-Job
Подавляет командную строку, пока не будут завершены одно или все фоновые задания PowerShell, выполняемые в сеансе.
Синтаксис
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-Id] <Int32[]>
[<CommonParameters>]
Wait-Job
[-Job] <Job[]>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-Name] <String[]>
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-InstanceId] <Guid[]>
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-State] <JobState>
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-Filter] <Hashtable>
[<CommonParameters>]
Описание
Командлет Wait-Job
ожидает завершения фоновых заданий PowerShell перед отображением командной строки. При этом можно командлет может ожидать завершения одного или всех фоновых заданий либо ограничиваться максимальным временем ожидания.
После завершения команд в задании отображает командную строку и возвращает объект задания, Wait-Job
чтобы его можно было передать в другую команду.
Командлет можно использовать Wait-Job
для ожидания фоновых заданий, например тех, которые были запущены с помощью Start-Job
командлета или параметра AsJob командлета Invoke-Command
. Дополнительные сведения о фоновых заданиях Windows PowerShell см. в разделе 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 (Get-Content Machines.txt)
$c = 'Get-EventLog -LogName System | where {$_.EntryType -eq "error" --and $_.Source -eq "LSASRV"} | Out-File Errors.txt'
Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {$Using:c}
Invoke-Command -Session $s -ScriptBlock {Wait-Job -Any}
В этом примере используется параметр Any для Wait-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. Установка времени ожидания для заданий на удаленных компьютерах
$s = New-PSSession Server01, Server02, Server03
$jobs = Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {Get-Date}}
$done = Invoke-Command -Session $s -ScriptBlock {Wait-Job -Timeout 30}
В этом примере показано, как использовать параметр Timeout , Wait-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
Эта команда ожидает завершения задания DailyLog через 120 секунд (две минуты). Если задание не будет завершено в течение следующих двух минут, командная строка все равно возвращается, и задание продолжает выполняться в фоновом режиме.
Пример 7. Ожидание задания по имени
Wait-Job -Name "Job3"
Эта команда использует имя задания для определения задания, для которого требуется ждать.
Пример 8. Ожидание заданий на локальном компьютере, запущенных с Start-Job
$j = Start-Job -ScriptBlock {Get-ChildItem *.ps1| where {$_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 Server01, Server02, Server03
$j = Invoke-Command -Session $s -ScriptBlock {Get-Process} -AsJob
$j | Wait-Job
В этом примере показано, как использовать Wait-Job
задания, запущенные на удаленных компьютерах с помощью параметра AsJob .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
прежде чем появится запрос.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Filter
Указывает хэш-таблицу условий. Этот командлет ожидает заданий, удовлетворяющих всем условиям в хэш-таблице. Введите хэш-таблицу, где ключи являются свойствами заданий, а значения — значениями этих свойств.
Этот параметр работает только с пользовательскими типами заданий, такими как задания рабочих процессов и запланированные задания. Он не работает со стандартными фоновыми заданиями, такими как созданные с помощью командлета Start-Job
. Дополнительные сведения о поддержке данного параметра см. в разделе справки о соответствующем типе заданий.
Этот параметр впервые появился в Windows PowerShell 3.0.
Type: | Hashtable |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Force
Указывает, что этот командлет продолжает ждать заданий в состоянии Приостановлено или Отключено. По умолчанию Wait-Job
возвращает или завершает ожидание, если задания находятся в одном из следующих состояний:
- Завершено
- Сбой
- Остановлена
- Приостановлена
- Отключено
Этот параметр впервые появился в Windows PowerShell 3.0.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Id
Указывает массив идентификаторов заданий, для которых этот командлет ожидает.
Идентификатор — это целое число, которое однозначно идентифицирует задание в текущем сеансе. Его легче запомнить и ввести, чем идентификатор экземпляра, но он уникален только в текущем сеансе. Можно ввести один или несколько идентификаторов, разделенных запятыми. Чтобы найти идентификатор задания, введите Get-Job
.
Type: | Int32[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-InstanceId
Указывает массив идентификаторов экземпляров заданий, для которых этот командлет ожидает. По умолчанию останавливаются все задания.
Идентификатор экземпляра — это GUID, который однозначно определяет задание на компьютере. Чтобы найти идентификатор экземпляра задания, используйте .Get-Job
Type: | Guid[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Job
Указывает задания, для которых этот командлет ожидает. Введите переменную, содержащую объекты заданий, либо команду, которая их возвращают. Оператор конвейера также можно использовать для отправки объектов заданий командлету Wait-Job
. По умолчанию ожидает всех заданий, Wait-Job
созданных в текущем сеансе.
Type: | Job[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Name
Указывает понятные имена заданий, для которых этот командлет ожидает.
Type: | String[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-State
Указывает состояние задания. Этот командлет ожидает только задания в указанном состоянии. Допустимые значения для этого параметра:
- NotStarted
- Запущен
- Завершено
- Сбой
- Остановлена
- Блокировано
- Приостановлена
- Отключено
- Приостановка
- Остановка
Дополнительные сведения о состояниях задания см. в разделе Перечисление JobState.
Type: | JobState |
Accepted values: | NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Timeout
Задает максимальное время ожидания для каждого фонового задания в секундах. Значение по умолчанию -1 указывает, что командлет ожидает завершения задания. Время начинается при отправке Wait-Job
команды, а Start-Job
не команды.
Если указанное время истекло, ожидание прекращается, а окно командной строки становится активным, даже если задание все еще выполняется. Команда не отображает сообщение об ошибке.
Type: | Int32 |
Aliases: | TimeoutSec |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Входные данные
System.Management.Automation.RemotingJob
Объект задания можно передать в этот командлет.
Выходные данные
System.Management.Automation.PSRemotingJob
Этот командлет возвращает объекты заданий, представляющие завершенные задания. Если ожидание заканчивается из-за превышения значения параметра Timeout , Wait-Job
не возвращает никаких объектов.
Примечания
По умолчанию Wait-Job
возвращает или завершает ожидание, если задания находятся в одном из следующих состояний:
- Завершено
- Сбой
- Остановлена
- Приостановлена
- Отключено. Чтобы продолжить
Wait-Job
ждать приостановленных и отключенных заданий, используйте параметр Force .