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


Receive-Job

Возвращает результаты фоновых заданий PowerShell в текущем сеансе.

Синтаксис

Location (по умолчанию)

Receive-Job
    [-Job] <Job[]>
    [[-Location] <string[]>]
    [-Keep]
    [-NoRecurse]
    [-Force]
    [-Wait]
    [-AutoRemoveJob]
    [-WriteEvents]
    [-WriteJobInResults]
    [<CommonParameters>]

ComputerName

Receive-Job
    [-Job] <Job[]>
    [[-ComputerName] <string[]>]
    [-Keep]
    [-NoRecurse]
    [-Force]
    [-Wait]
    [-AutoRemoveJob]
    [-WriteEvents]
    [-WriteJobInResults]
    [<CommonParameters>]

Session

Receive-Job
    [-Job] <Job[]>
    [[-Session] <PSSession[]>]
    [-Keep]
    [-NoRecurse]
    [-Force]
    [-Wait]
    [-AutoRemoveJob]
    [-WriteEvents]
    [-WriteJobInResults]
    [<CommonParameters>]

NameParameterSet

Receive-Job
    [-Name] <string[]>
    [-Keep]
    [-NoRecurse]
    [-Force]
    [-Wait]
    [-AutoRemoveJob]
    [-WriteEvents]
    [-WriteJobInResults]
    [<CommonParameters>]

InstanceIdParameterSet

Receive-Job
    [-InstanceId] <guid[]>
    [-Keep]
    [-NoRecurse]
    [-Force]
    [-Wait]
    [-AutoRemoveJob]
    [-WriteEvents]
    [-WriteJobInResults]
    [<CommonParameters>]

SessionIdParameterSet

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

Начиная с 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

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

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

При использовании параметра 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 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

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

Пример 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
Default value:False
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-ComputerName

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

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

Свойства параметра

Тип:

String[]

Default value:All computers available
Поддерживаются подстановочные знаки:True
DontShow:False
Aliases:CN

Наборы параметров

ComputerName
Position:1
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:True
Значение из оставшихся аргументов:False

-Force

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

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

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

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

Свойства параметра

Тип:SwitchParameter
Default value:False
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Id

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

Идентификатор — это целое число, которое однозначно идентифицирует задание в текущем сеансе. проще запоминать и вводить идентификатор экземпляра, но это уникально только в текущем сеансе. Можно ввести один или несколько идентификаторов, разделенных запятыми. Чтобы найти идентификатор задания, используйте Get-Job.

Свойства параметра

Тип:

Int32[]

Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

SessionIdParameterSet
Position:0
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:True
Значение из оставшихся аргументов:False

-InstanceId

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

Идентификатор экземпляра — это GUID, который однозначно идентифицирует задание на компьютере. Чтобы найти идентификатор экземпляра задания, используйте командлет Get-Job.

Свойства параметра

Тип:

Guid[]

Default value:All instances
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

InstanceIdParameterSet
Position:0
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:True
Значение из оставшихся аргументов:False

-Job

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

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

Свойства параметра

Тип:

Job[]

Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

Location
Position:0
Обязательно:True
Значение из конвейера:True
Значение из конвейера по имени свойства:True
Значение из оставшихся аргументов:False
Session
Position:0
Обязательно:True
Значение из конвейера:True
Значение из конвейера по имени свойства:True
Значение из оставшихся аргументов:False
ComputerName
Position:0
Обязательно:True
Значение из конвейера:True
Значение из конвейера по имени свойства:True
Значение из оставшихся аргументов:False

-Keep

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

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

Свойства параметра

Тип:SwitchParameter
Default value:False
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Location

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

Свойства параметра

Тип:

String[]

Default value:All locations
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

Location
Position:1
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Name

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

Свойства параметра

Тип:

String[]

Default value:None
Поддерживаются подстановочные знаки:True
DontShow:False

Наборы параметров

NameParameterSet
Position:0
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:True
Значение из оставшихся аргументов:False

-NoRecurse

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

Свойства параметра

Тип:SwitchParameter
Default value:False
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Session

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

Свойства параметра

Тип:

PSSession[]

Default value:All sessions
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

Session
Position:1
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:True
Значение из оставшихся аргументов:False

-Wait

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

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

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

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

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

Свойства параметра

Тип:SwitchParameter
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-WriteEvents

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

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

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

Свойства параметра

Тип:SwitchParameter
Default value:False
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-WriteJobInResults

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

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

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

Свойства параметра

Тип:SwitchParameter
Default value:False
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

CommonParameters

Этот командлет поддерживает общие параметры: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction и -WarningVariable. Дополнительные сведения см. в разделе about_CommonParameters.

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

Job

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

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

PSObject

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

Примечания

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

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