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
командлет для получения результатов задания.
Она использует параметр 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 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.
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
Указывает, что этот командлет продолжает ждать, если задания находятся в состоянии Приостановлено или Отключено . По умолчанию параметр Receive-Job
Wait возвращает или завершает ожидание, если задания находятся в одном из следующих состояний:
- Завершено
- Сбой
- Остановлена
- Приостановлена
- отключен.
Параметр 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 продолжал ожидать, если задание находится в состоянии Suspended или Disconnected, используйте параметр 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 |
Входные данные
Объекты заданий можно передать в этот командлет.
Выходные данные
PSObject
Этот командлет возвращает результаты команд в задании.