Поделиться через


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 ожидает завершения задания перед продолжением выполнения. Конечные состояния:

  • Завершено
  • Неудачно
  • Остановлено
  • Приостановлена
  • Отключено

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

$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 команды отправляются на удаленный компьютер с помощью командлетаInvoke-Command.Wait-Job

Этот пример используется 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}

В этом примере используется параметр 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. Задание времени ожидания заданий на удаленных компьютерах

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>

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

Первая команда создает 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-Job задания, запущенные на удаленных компьютерах, с помощью параметра Invoke-CommandAsJob . При использовании 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
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Filter

Задает хэш-таблицу условий. Этот командлет ожидает заданий, удовлетворяющих всем условиям в хэш-таблице. Введите хэш-таблицу, где ключи являются свойствами заданий, а значения — значениями этих свойств.

Этот параметр работает только с пользовательскими типами заданий, такими как задания рабочих процессов и запланированные задания. Он не работает над стандартными заданиями, такими как созданные с помощью командлета Start-Job . Дополнительные сведения о поддержке данного параметра см. в разделе справки о соответствующем типе заданий.

Этот параметр впервые появился в Windows PowerShell 3.0.

Тип:Hashtable
Position:0
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-Force

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

  • Завершено
  • Неудачно
  • Остановлено
  • Приостановлена
  • Отключено

Этот параметр впервые появился в Windows PowerShell 3.0.

Тип:SwitchParameter
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Id

Задает массив идентификаторов заданий, для которых этот командлет ожидает.

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

Тип:Int32[]
Position:0
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-InstanceId

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

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

Тип:Guid[]
Position:0
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-Job

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

Тип:Job[]
Position:0
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-Name

Задает понятные имена заданий, для которых этот командлет ожидает.

Тип:String[]
Position:0
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-State

Указывает состояние задания. Этот командлет ожидает только заданий в указанном состоянии. Допустимые значения для этого параметра:

  • NotStarted
  • Выполняется
  • Завершено
  • Неудачно
  • Остановлено
  • Заблокировано
  • Приостановлена
  • Отключено
  • Приостановка
  • Остановка

Дополнительные сведения о состояниях заданий см. в разделе "Перечисление JobState".

Тип:JobState
Допустимые значения:NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint
Position:0
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-Timeout

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

Если это время превышено, ожидание заканчивается и выполнение продолжается, даже если задание по-прежнему выполняется. Команда не отображает сообщение об ошибке.

Тип:Int32
Aliases:TimeoutSec
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

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

System.Management.Automation.RemotingJob

Объект задания можно передать в этот командлет.

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

System.Management.Automation.PSRemotingJob

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

Примечания

PowerShell включает следующие псевдонимы для Wait-Job:

  • Все платформы:
    • wjb

По умолчанию Wait-Job возвращает или заканчивает ожидание, когда задания находятся в одном из следующих состояний:

  • Завершено
  • Неудачно
  • Остановлено
  • Приостановлена
  • Отключено

Wait-Job Чтобы продолжить ожидание приостановленных и отключенных заданий, используйте параметр Force.