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


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, чтобы сохранить результаты, чтобы получить их снова. Чтобы удалить результаты задания, выполните команду еще раз без параметра keep, закройте сеанс или используйте командлет для удаления задания из сеанса.

Начиная с Windows PowerShell 3.0, Receive-Job также получает результаты пользовательских типов заданий, таких как задания рабочего процесса и экземпляры запланированных заданий. Чтобы разрешить Receive-Job получить результаты пользовательского типа задания, импортируйте модуль, поддерживающий настраиваемый тип задания, в сеанс перед запуском команды Receive-Job либо с помощью командлета Import-Module, либо с помощью или получения командлета в модуле. Сведения о конкретном пользовательском типе задания см. в документации по функции пользовательского типа задания.

Примеры

Пример 1. Получение результатов для определенного задания

$job = Start-Job -ScriptBlock {Get-Process}
Receive-Job -Job $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. Получение результатов нескольких фоновых заданий

При использовании параметра AsJobInvoke-Command для запуска задания объект задания создается на локальном компьютере, даже если задание выполняется на удаленных компьютерах. В результате для управления заданием используются локальные команды.

Кроме того, при использовании AsJobPowerShell возвращает один объект задания, содержащий дочернее задание для каждого запущенного задания. В этом случае объект задания содержит три дочерних задания, по одному для каждого задания на каждом удаленном компьютере.

# 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 job outputs the ComputerName of each server.
# Save the job objects in the $j variable.
$j = Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {$env:COMPUTERNAME}}
# 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    Job1     Completed  True          Localhost  $env:COMPUTERNAME
2    Job2     Completed  True          Localhost  $env:COMPUTERNAME
3    Job3     Completed  True          Localhost  $env:COMPUTERNAME

# 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 -Job $Using:j}

Server01
Server02
Server03

В этом примере показано, как получить результаты фоновых заданий, выполняемых на трех удаленных компьютерах. В отличие от предыдущего примера, используя Invoke-Command для запуска команды Start-Job, фактически начались три независимых задания на каждом из трех компьютеров. В результате команда вернула три объекта задания, представляющие три задания, выполняемые локально на трех разных компьютерах.

Заметка

В последней команде, так как $j является локальной переменной, блок скрипта использует модификатор области using для идентификации переменной $j. Дополнительные сведения об модификаторе области using см. в about_Remote_Variables.

Пример 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, например команду .

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

-Wait

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

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

  • Завершённый
  • Неудавшийся
  • Остановленный
  • Подвешенный
  • Бессвязный.

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

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

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

-WriteEvents

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

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

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

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

-WriteJobInResults

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

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

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

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

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

Job

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

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

PSObject

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