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


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

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

Job

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

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

PSObject

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

Примечания

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

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