Wait-Job
Подавляет командную строку до тех пор, пока не будет завершено одно или все фоновые задания Windows 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 ожидает завершения фоновых заданий Windows PowerShell до отображения командной строки. Вы можете ждать завершения любого фонового задания или до завершения всех фоновых заданий, а также задать максимальное время ожидания задания.
Когда команды в задании завершены, wait-Job отображает командную строку и возвращает объект задания, чтобы передать его в другую команду.
Для ожидания фоновых заданий можно использовать командлет Wait-Job, например те, которые были запущены с помощью командлета Start-Job или параметра AsJob командлета Invoke-Command. Дополнительные сведения о фоновых заданиях Windows PowerShell см. в about_Jobs.
Начиная с Windows PowerShell 3.0 командлет wait-Job также ожидает пользовательских типов заданий, таких как задания рабочих процессов и экземпляры запланированных заданий. Чтобы включить ожидание заданий определенного типа, импортируйте модуль, поддерживающий настраиваемый тип задания, перед запуском командлета Get-Job либо с помощью командлета Import-Module, либо с помощью командлета Import-Module, либо с помощью или получения командлета в модуле. Сведения о конкретном пользовательском типе задания см. в документации по функции пользовательского типа задания.
Примеры
Пример 1. Ожидание всех заданий
PS C:\> Get-Job | Wait-Job
Эта команда ожидает завершения всех фоновых заданий, выполняемых в сеансе.
Пример 2. Ожидание заданий, запущенных на удаленных компьютерах с помощью Start-Job
PS C:\> $s = New-PSSession Server01, Server02, Server03
PS C:\> Invoke-Command -Session $s -ScriptBlock {Start-Job -Name Date1 -ScriptBlock {Get-Date}}
PS C:\> $done = Invoke-Command -Session $s -Command {Wait-Job -Name Date1}
PS C:\> $done.Count
3
В этом примере показано, как использовать командлет
В этом примере используется wait-Job, чтобы определить, завершена ли команда Get-Date, запущенная в качестве фонового задания на трех разных компьютерах.
Первая команда создает сеанс Windows PowerShell (PSSession) на каждом из трех удаленных компьютеров и сохраняет их в переменной $s.
Вторая команда использует Invoke-Command для запуска начального задания в каждом из трех сеансов в $s. Все задания называются Date1.
Третья команда использует Invoke-Command для запуска задания ожидания. Эта команда ожидает завершения заданий Date1 на каждом компьютере. Он сохраняет полученную коллекцию (массив) объектов заданий в переменной $done.
Четвертая команда использует свойство Count массива объектов заданий в переменной $done, чтобы определить, сколько заданий завершено.
Пример 3. Определение завершения первого фонового задания
PS C:\> $s = New-PSSession (Get-Content Machines.txt)
PS C:\> $c = 'Get-EventLog -LogName System | where {$_.EntryType -eq "error" --and $_.Source -eq "LSASRV"} | Out-File Errors.txt'
PS C:\> Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {$Using:c}
PS C:\> Invoke-Command -Session $s -ScriptBlock {Wait-Job -Any}
В этом примере используется параметр AnyWait-Job, чтобы определить, когда выполняется первое из многих фоновых заданий, выполняемых в текущем сеансе. В нем также показано, как использовать командлет wait-Job, чтобы дождаться завершения удаленных заданий.
Первая команда создает
Вторая команда сохраняет командную строку Get-EventLog в кавычках в переменной $c.
Третья команда использует командлет Invoke-Command для запуска начального задания в каждом сеансе в $s. Команда start-Job запускает фоновое задание, которое запускает команду get-EventLog Get-EventLog в переменной $c.
Команда использует модификатор области Using, чтобы указать, что переменная $c была определена на локальном компьютере.
Модификатор области using представлен в Windows PowerShell 3.0.
Дополнительные сведения об модификаторе области
Четвертая команда использует Invoke-Command для выполнения команды wait-Job в сеансах. Он использует параметр Any для ожидания первого задания на удаленных компьютерах.
Пример 4. Задание времени ожидания заданий на удаленных компьютерах
PS C:\> $s = New-PSSession Server01, Server02, Server03
PS C:\> $jobs = Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {Get-Date}}
PS C:\> $done = Invoke-Command -Session $s -ScriptBlock {Wait-Job -Timeout 30}
В этом примере показано, как использовать параметр TimeoutWait-Job, чтобы задать максимальное время ожидания заданий, выполняемых на удаленных компьютерах.
Первая команда создает
Вторая команда использует invoke-Command
Третья команда использует Invoke-Command для выполнения задания ожидания в каждом сеансе в $s. Команда wait-Job определяет, выполняются ли все команды в течение 30 секунд. Он использует параметр Timeout со значением 30, чтобы установить максимальное время ожидания, а затем сохраняет результаты команды в переменной $done.
В этом случае после 30 секунд выполняется только команда на компьютере Server02. ожидание задания заканчивает ожидание, отображает командную строку и возвращает объект, представляющий завершенное задание.
Переменная $done содержит объект задания, представляющий задание, запущенное на сервере Server02.
Пример 5. Дождитесь завершения одного из нескольких заданий
PS C:\> Wait-Job -id 1,2,5 -Any
Эта команда определяет три задания идентификаторами и ожидает завершения любого из них. Командная строка возвращается после завершения первого задания.
Пример 6. Ожидание периода, а затем разрешение задания продолжить в фоновом режиме
PS C:\> Wait-Job -Name "DailyLog" -Timeout 120
Эта команда ожидает 120 секунд (две минуты) для завершения задания DailyLog. Если задание не завершится в течение следующих двух минут, командная строка возвращается в любом случае, и задание продолжает выполняться в фоновом режиме.
Пример 7. Ожидание задания по имени
PS C:\> Wait-Job -Name "Job3"
Эта команда использует имя задания для идентификации задания, для которого требуется ждать.
Пример 8. Ожидание заданий на локальном компьютере, запущенных с Start-Job
PS C:\> $j = Start-Job -ScriptBlock {Get-ChildItem *.ps1| where {$_lastwritetime -gt ((Get-Date) - (New-TimeSpan -Days 7))}}
PS C:\> $j | Wait-Job
В этом примере показано, как использовать командлет
Эти команды запускают задание, которое получает файлы скриптов Windows PowerShell, которые были добавлены или обновлены на прошлой неделе.
Первая команда использует начальное задание для запуска фонового задания на локальном компьютере. Задание выполняет команду Get-ChildItem, которая получает все файлы с расширением имени файла .ps1, которые были добавлены или обновлены на прошлой неделе.
Третья команда использует wait-job, чтобы ждать завершения задания. По завершении задания команда отображает объект задания, содержащий сведения о задании.
Пример 9. Ожидание заданий, запущенных на удаленных компьютерах с помощью Invoke-Command
PS C:\> $s = New-PSSession Server01, Server02, Server03
PS C:\> $j = Invoke-Command -Session $s -ScriptBlock {Get-Process} -AsJob
PS C:\> $j | Wait-Job
В этом примере показано, как использовать задания ожидания с заданиями, запущенными на удаленных компьютерах, с помощью параметра AsJobInvoke-Command. При использовании AsJobзадание создается на локальном компьютере и результаты автоматически возвращаются на локальный компьютер, даже если задание выполняется на удаленных компьютерах.
В этом примере используется
Первая команда создает объекты PSSession на трех компьютерах и сохраняет их в переменной $s.
Вторая команда использует Invoke-Command для выполнения Get-Process в каждом из трех сеансов в $s. Команда использует параметр AsJob для асинхронного выполнения команды в качестве фонового задания. Команда возвращает объект задания, как и задания, запущенные с помощью Start-Job, и объект задания хранится в переменной $j.
Третья команда использует оператор конвейера (|) для отправки объекта задания в $j командлету Wait-Job. Команда Invoke-Command не требуется в этом случае, так как задание находится на локальном компьютере.
Пример 10. Ожидание задания с идентификатором
PS C:\> Get-Job
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 Job1 Completed True localhost,Server01.. get-service
4 Job4 Completed True localhost dir | where
PS C:\> Wait-Job -Id 1
Эта команда ожидает задания со значением идентификатора 1.
Параметры
-Any
Указывает, что этот командлет отображает командную строку и возвращает объект задания при завершении любого задания. По умолчанию ожидание задания ожидания ожидает завершения всех указанных заданий перед отображением запроса.
Тип: | SwitchParameter |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Filter
Задает хэш-таблицу условий. Этот командлет ожидает заданий, удовлетворяющих всем условиям в хэш-таблице. Введите хэш-таблицу, в которой ключи являются свойствами задания и значениями свойств задания.
Этот параметр работает только в пользовательских типах заданий, таких как задания рабочего процесса и запланированные задания. Он не работает на стандартных фоновых заданиях, таких как созданные с помощью командлета запуска и задания. Сведения о поддержке этого параметра см. в разделе справки для типа задания.
Этот параметр появился в Windows PowerShell 3.0.
Тип: | Hashtable |
Position: | 0 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | False |
-Force
Указывает, что этот командлет продолжает ждать заданий в состоянии приостановки или отключения.
По умолчанию возвращается
- Завершённый
- Неудавшийся
- Остановленный
- Подвешенный
- Бессвязный
Этот параметр появился в 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. По умолчанию задание ожидания ожидает всех заданий, созданных в текущем сеансе.
Тип: | Job[] |
Position: | 0 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | False |
-Name
Задает понятные имена заданий, для которых этот командлет ожидает.
Тип: | String[] |
Position: | 0 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | False |
-State
Указывает состояние задания. Этот командлет ожидает только заданий в указанном состоянии. Допустимые значения для этого параметра:
- NotStarted
- Бег
- Завершённый
- Неудавшийся
- Остановленный
- Блокированный
- Подвешенный
- Бессвязный
- Приостановка
- Зубная пломба
Дополнительные сведения о состояниях заданий см. в перечисления JobState в библиотеке MSDN.
Тип: | JobState |
Допустимые значения: | NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint |
Position: | 0 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | False |
-Timeout
Указывает максимальное время ожидания для каждого фонового задания в секундах.
Значение по умолчанию -1 указывает, что командлет ожидает завершения задания.
Время начинается при отправке команды задания ожидания
Если это время превышено, ожидание заканчивается и командная строка возвращается, даже если задание по-прежнему выполняется. Команда не отображает сообщение об ошибке.
Тип: | Int32 |
Aliases: | TimeoutSec |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
Входные данные
System.Management.Automation.RemotingJob
Объект задания можно передать в этот командлет.
Выходные данные
System.Management.Automation.PSRemotingJob
Этот командлет возвращает объекты заданий, представляющие завершенные задания. Если ожидание заканчивается, так как значение параметра timeout превышено, wait-Job не возвращает объекты.
Примечания
- По умолчанию возвращается
задания ожидания или заканчивается ожиданием, когда задания находятся в одном из следующих состояний:
- Завершённый
- Неудавшийся
- Остановленный
- Подвешенный
- Отключено для прямого задания wait-job, чтобы продолжить ожидание приостановленных и отключенных заданий, используйте параметр Force.