Receive-Job
Возвращает результаты фоновых заданий PowerShell в текущем сеансе.
Синтаксис
Receive-Job
[-Job] <Job[]>
[[-Location] <string[]>]
[-Keep]
[-NoRecurse]
[-Force]
[-Wait]
[-AutoRemoveJob]
[-WriteEvents]
[-WriteJobInResults]
[<CommonParameters>]
Receive-Job
[-Job] <Job[]>
[[-ComputerName] <string[]>]
[-Keep]
[-NoRecurse]
[-Force]
[-Wait]
[-AutoRemoveJob]
[-WriteEvents]
[-WriteJobInResults]
[<CommonParameters>]
Receive-Job
[-Job] <Job[]>
[[-Session] <PSSession[]>]
[-Keep]
[-NoRecurse]
[-Force]
[-Wait]
[-AutoRemoveJob]
[-WriteEvents]
[-WriteJobInResults]
[<CommonParameters>]
Receive-Job
[-Name] <string[]>
[-Keep]
[-NoRecurse]
[-Force]
[-Wait]
[-AutoRemoveJob]
[-WriteEvents]
[-WriteJobInResults]
[<CommonParameters>]
Receive-Job
[-InstanceId] <guid[]>
[-Keep]
[-NoRecurse]
[-Force]
[-Wait]
[-AutoRemoveJob]
[-WriteEvents]
[-WriteJobInResults]
[<CommonParameters>]
Receive-Job
[-Id] <int[]>
[-Keep]
[-NoRecurse]
[-Force]
[-Wait]
[-AutoRemoveJob]
[-WriteEvents]
[-WriteJobInResults]
[<CommonParameters>]
Описание
Командлет Receive-Job
получает результаты фоновых заданий PowerShell, например запущенных с помощью Start-Job
командлета или параметра AsJob любого командлета. Можно получить результаты всех заданий или указать задания по имени, идентификатору, идентификатору экземпляра, имени компьютера, расположению или сеансу или путем отправки объекта задания.
При запуске фонового задания PowerShell задание запускается, но результаты не отображаются сразу. Вместо этого команда возвращает объект, представляющий фоновое задание. Объект задания содержит полезные сведения о задании, но он не содержит результаты. Этот метод позволяет продолжать работать в сеансе во время выполнения задания. Дополнительные сведения о фоновых заданиях в PowerShell см. в about_Jobs.
Командлет Receive-Job
получает результаты, созданные по времени Receive-Job
отправки команды. Если результаты еще не завершены, можно выполнить дополнительные Receive-Job
команды, чтобы получить оставшиеся результаты.
По умолчанию результаты задания удаляются из системы при их получении, но вы можете использовать параметр Keep для сохранения результатов, чтобы получить их снова. Чтобы удалить результаты задания, выполните Receive-Job
команду еще раз без параметра Keep , закройте сеанс или используйте Remove-Job
командлет для удаления задания из сеанса.
Начиная с Windows PowerShell 3.0, Receive-Job
также получает результаты пользовательских типов заданий, таких как задания рабочего процесса и экземпляры запланированных заданий. Чтобы включить Receive-Job
получение результатов пользовательского типа задания, импортируйте модуль, поддерживающий пользовательский тип задания, в сеанс перед Receive-Job
выполнением команды с помощью Import-Module
командлета или получения командлета в модуле. Дополнительные сведения о определенных пользовательских типах заданий см. в разделе документации о данной функции.
Примеры
Пример 1. Получение результатов для определенного задания
$job = Start-Job -ScriptBlock {Get-Process}
Start-Sleep -Seconds 1
Receive-Job -Job $job
Эти команды используют параметр Job для Receive-Job
получения результатов определенного задания.
Первая команда запускает задание с Start-Job
объектом задания и сохраняет объект задания в переменной $job
.
Вторая команда использует Receive-Job
командлет для получения результатов задания.
Он использует параметр Задания для указания задания.
Пример 2. Использование параметра Keep
$job = Start-Job -ScriptBlock {Get-Service dhcp, fakeservice}
Start-Sleep -Seconds 1
$job | Receive-Job -Keep
Cannot find any service with service name 'fakeservice'.
+ CategoryInfo : ObjectNotFound: (fakeservice:String) [Get-Service], ServiceCommandException
+ FullyQualifiedErrorId : NoServiceFoundForGivenName,Microsoft.PowerShell.Commands.GetServiceCommand
+ PSComputerName : localhost
Status Name DisplayName
------ ---- -----------
Running dhcp DHCP Client
$job | Receive-Job -Keep
Cannot find any service with service name 'fakeservice'.
+ CategoryInfo : ObjectNotFound: (fakeservice:String) [Get-Service], ServiceCommandException
+ FullyQualifiedErrorId : NoServiceFoundForGivenName,Microsoft.PowerShell.Commands.GetServiceCommand
+ PSComputerName : localhost
Status Name DisplayName
------ ---- -----------
Running dhcp DHCP Client
В этом примере задание хранится в переменной $job
, а задание передается командлету Receive-Job
. Параметр -Keep
также используется для повторного получения всех агрегированных потоковых данных после первого представления.
Пример 3. Получение результатов нескольких фоновых заданий
При использовании параметра Invoke-Command
AsJob для запуска задания на локальном компьютере создается объект задания, даже если задание выполняется на удаленных компьютерах. Таким образом, для управления заданием можно использовать локальные команды.
Кроме того, при использовании AsJob PowerShell возвращает один объект задания, содержащий дочернее задание для каждого запущенного задания. В этом случае объект задания содержит три дочерних задания, по одному для каждого задания на каждом удаленном компьютере.
# Use the Invoke-Command cmdlet with the -AsJob parameter to start a background job that
# runs a Get-Service command on three remote computers. Store the resulting job object in
# the $j variable
$j = Invoke-Command -ComputerName Server01, Server02, Server03 -ScriptBlock {Get-Service} -AsJob
# Display the value of the **ChildJobs** property of the job object in $j. The display
# shows that the command created three child jobs, one for the job on each remote
# computer. You could also use the -IncludeChildJobs parameter of the Get-Job cmdlet.
$j.ChildJobs
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
2 Job2 Completed True Server01 Get-Service
3 Job3 Completed True Server02 Get-Service
4 Job4 Completed True Server03 Get-Service
# Use the Receive-Job cmdlet to get the results of just the Job3 child job that ran on the
# Server02 computer. Use the *Keep* parameter to allow you to view the aggregated stream
# data more than once.
Receive-Job -Name Job3 -Keep
Status Name DisplayName PSComputerName
------ ----------- ----------- --------------
Running AeLookupSvc Application Experience Server02
Stopped ALG Application Layer Gateway Service Server02
Running Appinfo Application Information Server02
Running AppMgmt Application Management Server02
Пример 4. Получение результатов фоновых заданий на нескольких удаленных компьютерах
# Use the New-PSSession cmdlet to create three user-managed PSSessions on three servers,
# and save the sessions in the $s variable.
$s = New-PSSession -ComputerName Server01, Server02, Server03
# Use Invoke-Command run a Start-Job command in each of the PSSessions in the $s variable.
# The code creates a new job with a custom name to each server. The job outputs the
# datetime from each server. Save the job objects in the $j variable.
$invokeCommandSplat = @{
Session = $s
ScriptBlock = {
Start-Job -Name $('MyJob-' +$env:COMPUTERNAME) -ScriptBlock {
(Get-Date).ToString()
}
}
}
$j = Invoke-Command @invokeCommandSplat
# To confirm that these job objects are from the remote machines, run Get-Job to show no
# local jobs running.
Get-Job`
# Display the three job objects in $j. Note that the Localhost location is not the local
# computer, but instead localhost as it relates to the job on each Server.
$j
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 MyJob-Server01 Completed True Localhost (Get-Date).ToString()
2 MyJob-Server02 Completed True Localhost (Get-Date).ToString()
3 MyJob-Server03 Completed True Localhost (Get-Date).ToString()
# Use Invoke-Command to run a Receive-Job command in each of the sessions in the $s
# variable and save the results in the $results variable. The Receive-Job command must be
# run in each session because the jobs were run locally on each server.
$results = Invoke-Command -Session $s -ScriptBlock {
Receive-Job -Name $('MyJob-' +$env:COMPUTERNAME)
}
3/22/2021 7:41:47 PM
3/22/2021 7:41:47 PM
3/22/2021 9:41:47 PM
В этом примере показано, как получить результаты фоновых заданий, выполняющихся на трех удаленных компьютерах. В отличие от Start-Job
предыдущего примера, используя командуInvoke-Command
, на самом деле запускаются три независимых задания на каждом из трех компьютеров. В результате команда вернула три объекта задания, представляющие три задания, выполняемые локально на трех разных компьютерах.
Пример 5. Доступ к дочерним заданиям
Параметр -Keep
сохраняет состояние агрегированных потоков задания, чтобы его можно было просмотреть еще раз. Без этого параметра все агрегированные данные потока удаляются при получении задания.
Дополнительные сведения см. в about_Job_Details
Примечание.
Агрегированные потоки включают потоки всех дочерних заданий. Вы по-прежнему можете достичь отдельных потоков данных через объект задания и дочерние объекты задания.
Start-Job -Name TestJob -ScriptBlock {dir C:\, Z:\}
# Without the Keep parameter, aggregated child job data is displayed once.
# Then destroyed.
Receive-Job -Name TestJob
Directory: C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r--- 1/24/2019 7:11 AM Program Files
d-r--- 2/13/2019 8:32 AM Program Files (x86)
d-r--- 10/3/2018 11:47 AM Users
d----- 2/7/2019 1:52 AM Windows
Cannot find drive. A drive with the name 'Z' does not exist.
+ CategoryInfo : ObjectNotFound: (Z:String) [Get-ChildItem], DriveNotFoundException
+ FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
+ PSComputerName : localhost
# It would seem that the child job data is gone.
Receive-Job -Name TestJob
# Using the object model, you can still retrieve child job data and streams.
$job = Get-Job -Name TestJob
$job.ChildJobs[0].Error
Cannot find drive. A drive with the name 'Z' does not exist.
+ CategoryInfo : ObjectNotFound: (Z:String) [Get-ChildItem], DriveNotFoundException
+ FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
+ PSComputerName : localhost
Параметры
-AutoRemoveJob
Указывает, что этот командлет удаляет задание после возврата результатов задания. Если задание имеет больше результатов, задание по-прежнему удаляется, но Receive-Job
отображает сообщение.
Этот параметр работает только для настраиваемых типов заданий. Он предназначен для экземпляров типов заданий, которые сохраняют задание или тип вне сеанса, например экземпляры запланированных заданий.
Этот параметр нельзя использовать без параметра Wait .
Этот параметр впервые появился в Windows PowerShell 3.0.
Тип: | SwitchParameter |
Position: | Named |
Default value: | False |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-ComputerName
Задает массив имен компьютеров.
Этот параметр выбирает результаты задания, которые хранятся на локальном компьютере. Он не получает данные для заданий, выполняемых на удаленных компьютерах. Чтобы получить результаты задания, хранящиеся на удаленных компьютерах, используйте Invoke-Command
командлет для удаленного Receive-Job
выполнения команды.
Тип: | String[] |
Aliases: | Cn |
Position: | 1 |
Default value: | All computers available |
Обязательно: | False |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | True |
-Force
Указывает, что этот командлет продолжает ждать, если задания находятся в состоянии "Приостановлено " или "Отключено ". По умолчанию параметр wait возвращает Receive-Job
или завершает ожидание, когда задания находятся в одном из следующих состояний:
- Завершено
- Неудачно
- Остановлено
- Приостановлена
- отключен.
Параметр Force действителен только в том случае, если параметр Wait также используется в команде.
Этот параметр впервые появился в Windows PowerShell 3.0.
Тип: | SwitchParameter |
Position: | Named |
Default value: | False |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Id
Задает массив идентификаторов. Этот командлет получает результаты заданий с указанными идентификаторами.
Идентификатор — это целое число, которое однозначно идентифицирует задание в текущем сеансе. проще запоминать и вводить идентификатор экземпляра, но это уникально только в текущем сеансе. Можно ввести один или несколько идентификаторов, разделенных запятыми. Чтобы найти идентификатор задания, используйте Get-Job
.
Тип: | Int32[] |
Position: | 0 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | False |
-InstanceId
Задает массив идентификаторов экземпляров. Этот командлет получает результаты заданий с указанными идентификаторами экземпляров.
Идентификатор экземпляра — это GUID, который однозначно определяет задание на компьютере. Чтобы найти идентификатор экземпляра задания, используйте Get-Job
командлет.
Тип: | Guid[] |
Position: | 0 |
Default value: | All instances |
Обязательно: | True |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | False |
-Job
Указывает задание, для которого получаются результаты.
Введите переменную, содержащую задание, или команду, которая получает задание. Можно также передать объект Receive-Job
задания в .
Тип: | Job[] |
Position: | 0 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | False |
-Keep
Указывает, что этот командлет сохраняет агрегированные данные потока в системе даже после их получения. По умолчанию агрегированные данные потока удаляются после просмотра с Receive-Job
помощью .
Закрытие сеанса или удаление задания с помощью командлета Remove-Job
также удаляет агрегированные данные потока.
Тип: | SwitchParameter |
Position: | Named |
Default value: | False |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Location
Задает массив расположений. Этот командлет получает только результаты заданий в указанных расположениях.
Тип: | String[] |
Position: | 1 |
Default value: | All locations |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Name
Указывает массив понятных имен. Этот командлет получает результаты заданий с указанными именами. Поддерживаются подстановочные знаки.
Тип: | String[] |
Position: | 0 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | True |
-NoRecurse
Указывает, что этот командлет получает результаты только из указанного задания. По умолчанию Receive-Job
также получает результаты всех дочерних заданий указанного задания.
Тип: | SwitchParameter |
Position: | Named |
Default value: | False |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Session
Задает массив сеансов. Этот командлет получает результаты заданий, выполняемых в указанном сеансе PowerShell (PSSession). Введите переменную, содержащую PSSession или команду, которая получает psSession, например Get-PSSession
команду.
Тип: | PSSession[] |
Position: | 1 |
Default value: | All sessions |
Обязательно: | False |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | False |
-Wait
Указывает, что этот командлет подавляет командную строку до получения всех результатов задания. По умолчанию Receive-Job
немедленно возвращает доступные результаты.
По умолчанию параметр wait ожидает, пока задание не будет в одном из следующих состояний:
- Завершено
- Неудачно
- Остановлено
- Приостановлена
- Отключено
Чтобы направить параметр Wait , чтобы продолжить ожидание, если состояние задания приостановлено или отключено, используйте параметр Force вместе с параметром Wait .
Этот параметр впервые появился в Windows PowerShell 3.0.
Тип: | SwitchParameter |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-WriteEvents
Указывает, что этот командлет сообщает об изменении состояния задания во время ожидания завершения задания.
Этот параметр действителен только в том случае, если параметр Wait используется в команде, а параметр Keep опущен.
Этот параметр впервые появился в Windows PowerShell 3.0.
Тип: | SwitchParameter |
Position: | Named |
Default value: | False |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-WriteJobInResults
Указывает, что этот командлет возвращает объект задания, за которым следуют результаты.
Этот параметр действителен только в том случае, если параметр Wait используется в команде, а параметр Keep опущен.
Этот параметр впервые появился в Windows PowerShell 3.0.
Тип: | SwitchParameter |
Position: | Named |
Default value: | False |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
Входные данные
Объекты заданий можно передать в этот командлет.
Выходные данные
Этот командлет возвращает результаты команд в задании.
Примечания
PowerShell включает следующие псевдонимы для Receive-Job
:
- Все платформы:
rcjb
Связанные ссылки
PowerShell