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, чтобы сохранить результаты, чтобы получить их снова.
Чтобы удалить результаты задания, выполните команду
Начиная с 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
Указывает, что этот командлет продолжает ждать, если задания находятся в состоянии приостановленного Receive-Job
или завершает ожидание, когда задания находятся в одном из следующих состояний:
- Завершённый
- Неудавшийся
- Остановленный
- Подвешенный
- Бессвязный.
Параметр
Этот параметр появился в 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[] |
Position: | 1 |
Default value: | All sessions |
Обязательно: | False |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | False |
-Wait
Указывает, что этот командлет подавляет командную строку до получения всех результатов задания.
По умолчанию Receive-Job
немедленно возвращает доступные результаты.
По умолчанию параметр ожидания
- Завершённый
- Неудавшийся
- Остановленный
- Подвешенный
- Бессвязный.
Чтобы направить параметр
Этот параметр появился в 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 |
Входные данные
Объекты заданий можно передать в этот командлет.
Выходные данные
PSObject
Этот командлет возвращает результаты команд в задании.