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
       [-Keep]
       [-NoRecurse]
       [-Force]
       [-Wait]
       [-AutoRemoveJob]
       [-WriteEvents]
       [-WriteJobInResults]
       [-Name] <String[]>
       [<CommonParameters>]
Receive-Job
       [-Keep]
       [-NoRecurse]
       [-Force]
       [-Wait]
       [-AutoRemoveJob]
       [-WriteEvents]
       [-WriteJobInResults]
       [-InstanceId] <Guid[]>
       [<CommonParameters>]
Receive-Job
       [-Keep]
       [-NoRecurse]
       [-Force]
       [-Wait]
       [-AutoRemoveJob]
       [-WriteEvents]
       [-WriteJobInResults]
       [-Id] <Int32[]>
       [<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}
Receive-Job -Job $job

Эти команды используют параметр Job для Receive-Job получения результатов определенного задания.

Первая команда запускает задание с Start-Job объектом задания и сохраняет объект задания в переменной $job .

Вторая команда использует Receive-Job командлет для получения результатов задания. Он использует параметр Задания для указания задания.

Пример 2. Использование параметра Keep

$job = Start-Job -ScriptBlock {Get-Service dhcp, fakeservice}
$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 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.
$j = Invoke-Command -Session $s -ScriptBlock {​Start-Job -Name $('MyJob-' +$env:COMPUTERNAME) -ScriptBlock {(Get-Date).ToString()​}​}
# 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.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ComputerName

Задает массив имен компьютеров.

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

Type:String[]
Aliases:Cn
Position:1
Default value:All computers available
Required:False
Accept pipeline input:True
Accept wildcard characters:True

-Force

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

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

Параметр Force действителен только в том случае, если параметр Wait также используется в команде.

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

Type:SwitchParameter
Position:Named
Default value:False
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:All instances
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Job

Указывает задание, для которого получаются результаты.

Введите переменную, содержащую задание, или команду, которая получает задание. Можно также передать объект Receive-Jobзадания в .

Type:Job[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Keep

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

Закрытие сеанса или удаление задания с помощью командлета Remove-Job также удаляет агрегированные данные потока.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Location

Задает массив расположений. Этот командлет получает только результаты заданий в указанных расположениях.

Type:String[]
Position:1
Default value:All locations
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Name

Указывает массив понятных имен. Этот командлет получает результаты заданий с указанными именами. Поддерживаются подстановочные знаки.

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-NoRecurse

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

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Session

Задает массив сеансов. Этот командлет получает результаты заданий, выполняемых в указанном сеансе PowerShell (PSSession). Введите переменную, содержащую PSSession или команду, которая получает psSession, например Get-PSSession команду.

Type:PSSession[]
Position:1
Default value:All sessions
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Wait

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

По умолчанию параметр wait ожидает, пока задание не будет в одном из следующих состояний:

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

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

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

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WriteEvents

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

Этот параметр действителен только в том случае, если параметр Wait используется в команде, а параметр Keep опущен.

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

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WriteJobInResults

Указывает, что этот командлет возвращает объект задания, за которым следуют результаты.

Этот параметр действителен только в том случае, если параметр Wait используется в команде, а параметр Keep опущен.

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

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

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

Job

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

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

PSObject

Этот командлет возвращает результаты команд в задании.

Примечания

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

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