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


Receive-Job

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

Синтаксис

Receive-Job [-Job] <Job[]> [[-ComputerName] <string[]>] [-Keep] [-NoRecurse] [<CommonParameters>]

Receive-Job [[-InstanceId] <Guid[]>] [-Keep] [-NoRecurse] [<CommonParameters>]

Receive-Job [-Job] <Job[]> [[-Location] <string[]>] [-Keep] [-NoRecurse] [<CommonParameters>]

Receive-Job [[-Name] <string[]>] [-Keep] [-NoRecurse] [<CommonParameters>]

Receive-Job [-Job] <Job[]> [[-Session] <PSSession[]>] [-Keep] [-NoRecurse] [<CommonParameters>]

Receive-Job [-Id] <Int32[]> [-Keep] [-NoRecurse] [<CommonParameters>]

Описание

Командлет Receive-Job получает результаты фоновых заданий Windows Powershell. Используйте командлет Receive-Job для получения результатов заданий, запущенных с использованием командлета Start-Job или параметра AsJob любого командлета. Результаты можно получить для всех задания или для выбранных заданий по имени, идентификатору, идентификатору экземпляра, имени компьютера, местоположению, сеансу, либо передав объект задания в командлет.

При запуске фонового задания Windows PowerShell задание запускается, но его результаты не отображаются мгновенно. Вместо этого команда возвращает объект, представляющий фоновое задание. Объект задания содержит полезные сведения о задании, но не содержит результатов выполнения. Этот метод позволяет продолжать работать в рамках сеанса, пока задание выполняется. Дополнительные сведения о фоновых заданиях Windows PowerShell см. в разделе about_Jobs.

Чтобы получить результаты выполнения команды, используйте командлет Receive-Job. Командлет Receive-Job получает результаты, которые были созданы к моменту подачи команды Receive-Job. Если результаты пока не получены в полном объеме, можно выполнить дополнительные команды Receive-Job, чтобы получить оставшиеся результаты.

По умолчанию результаты работы заданий удаляются из системы сразу после их получения, но можно использовать параметр Keep для сохранения результатов и возможности повторного их получения. Чтобы удалить результаты задания, получите их еще раз (без параметра Keep), закройте сеанс или воспользуйтесь командлетом Remove-Job, чтобы удалить задание из сеанса.

Параметры

-ComputerName <string[]>

Получает результаты заданий, которые выполнялись на заданных компьютерах. Введите имена компьютеров. По умолчанию используется значение "Все задания в пределах текущего сеанса".

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

Обязательно?

false

Позиция?

2

Значение по умолчанию

Принимать входные данные из конвейера?

true (ByPropertyName)

Принимать подстановочные знаки?

false

-Id <Int32[]>

Получает результаты заданий с указанными идентификаторами. По умолчанию используется значение "Все задания в пределах текущего сеанса".

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

Обязательно?

true

Позиция?

1

Значение по умолчанию

Принимать входные данные из конвейера?

true (ByPropertyName)

Принимать подстановочные знаки?

false

-InstanceId <Guid[]>

Получает результаты заданий с указанными идентификаторами экземпляров. По умолчанию используется значение "Все задания в пределах текущего сеанса".

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

Обязательно?

false

Позиция?

1

Значение по умолчанию

Принимать входные данные из конвейера?

true (ByPropertyName)

Принимать подстановочные знаки?

false

-Job <Job[]>

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

Обязательно?

true

Позиция?

1

Значение по умолчанию

Принимать входные данные из конвейера?

true (ByValue, ByPropertyName)

Принимать подстановочные знаки?

false

-Keep

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

Чтобы удалить результаты, воспользуйтесь командлетом Receive-Job, чтобы снова получить их без параметра Keep, а затем закройте сеанс, или воспользуйтесь командлетом Remove-Job, чтобы удалить задание из сеанса.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-Location <string[]>

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

Обязательно?

false

Позиция?

2

Значение по умолчанию

Принимать входные данные из конвейера?

true (ByPropertyName)

Принимать подстановочные знаки?

false

-Name <string[]>

Получает результаты заданий с указанным понятным именем. По умолчанию используется значение "Все задания в пределах текущего сеанса".

Обязательно?

false

Позиция?

1

Значение по умолчанию

Принимать входные данные из конвейера?

true (ByPropertyName)

Принимать подстановочные знаки?

false

-NoRecurse

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

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-Session <PSSession[]>

Получает результаты заданий, которые выполнялись в рамках заданного сеанса Windows PowerShell (PSSession). Введите переменную, содержащую объект PSSession, или команду, получающую объект PSSession, например Get-PSSession. По умолчанию используется значение "Все задания в пределах текущего сеанса".

Обязательно?

false

Позиция?

2

Значение по умолчанию

Принимать входные данные из конвейера?

true (ByPropertyName)

Принимать подстановочные знаки?

false

<CommonParameters>

Данный командлет поддерживает общие параметры -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer и -OutVariable. Дополнительные сведения см. в разделе about_Commonparameters.

Ввод и вывод

Входным типом является тип объектов, которые можно передавать командлету по конвейеру. Возвращаемым типом является тип объектов, возвращаемых командлетом.

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

System.Management.Automation.Job

Кроме того, можно передать объекты заданий командлету Receive-Job по конвейеру.

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

PSObject

Командлет Receive-Job возвращает результаты выполнения команд в задании.

Пример 1

C:\PS>$job = start-job -scriptblock {get-process}

C:\PS> receive-job -job $job

Описание
-----------
Эти команды используют параметр Job для получения результатов конкретного задания. Первая команда запускает задание, выполняющее команду "Get-Process", с помощью командлета Start-Job. Команда использует оператор присваивания (=) для сохранения результирующего объекта задания в переменной $job.

Вторая команда использует командлет Receive-Job для получения результатов задания. Для указания задания используется параметр Job.





Пример 2

C:\PS>$job = start-job -scriptblock {get-process}

C:\PS> $job | receive-job

Описание
-----------
Этот пример очень напоминает пример 2, отличие заключается в использовании оператора конвейера (|) для отправки объекта задания командлету Receive-Job. В результате операции команде не обязательно использовать параметра Job для указания задания.





Пример 3

C:\PS>$j = invoke-command -computername Server01, Server02, Server03 -scriptblock {get-service} -AsJob

C:\PS> $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

C:\PS> 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

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

Первая команда с помощью командлета Invoke-Command запускает на трех удаленных компьютерах фоновое задание, выполняющее команду Get-Service. Параметр AsJob используется для выполнения команды в качестве фонового задания. Полученный объект задания сохраняется в переменной $j.

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

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

Вторая команда использует обращение через точку для отображения значения свойства ChildJobs объекта задания, сохраненного в переменной $j. Выходные данные показывают, что команда создала три дочерних задания, по одному заданию на каждом из удаленных компьютеров.
 
Третья команда использует командлет Receive-Job для получения результатов дочернего задания Job3, которое выполняется на компьютере Server02. Параметр Name используется в ней для указания имени дочернего задания, а параметр Keep — для сохранения результатов задания даже после их получения.





Пример 4

C:\PS>$s = new-pssession -computername Server01, Server02, Server03

C:\PS> $j = invoke-command -session $s -scriptblock {start-job -scriptblock {get-eventlog -logname system}}

C:\PS> $j

Id   Name     State      HasMoreData   Location   Command
--   ----     -----      -----------   --------   -------
1    Job1     Completed  True          Localhost  get-eventlog system
2    Job2     Completed  True          Localhost  get-eventlog system
3    Job3     Completed  True          Localhost  get-eventlog system

C:\PS> $results = invoke-command -session $s -scriptblock {param($j) receive-job -job $j} -ArgumentList $j

Описание
-----------
В этом примере показано, как получать результаты удаленных заданий, выполняемых на трех удаленных компьютерах.

Первая команда использует командлет New-PSSession для создания трех сеансов PSSession, по одному на каждом из удаленных серверов, указанных в команде. Она сохраняет сеансы PSSession в переменной $s.

Вторая команда использует командлет Invoke-Command для выполнения команды Start-Job в каждом из сеансов PSSession, заданных в переменной $s. Задание выполняет команду Get-Eventlog, которая получает события из журнала системных событий. Результаты сохраняются в переменной $j.

Поскольку команда использует командлет Invoke-Command для выполнения команды Start-Job, на трех компьютерах запускаются три независимых задания. Таким образом, команда возвращает три объекта задания, представляющие три задания, которые выполняются на трех разных компьютерах.

Третья команда выводит три объекта задания, сохраненные в переменной $j.  

Четвертая команда использует командлет Invoke-Command для выполнения команды Receive-Job в каждом из сеансов PSSession, заданных в переменной $s, и сохранения результатов в переменной $results.

Поскольку переменная $j является локальной, блок скрипта использует ключевое слово "param" для объявления переменных в команде и параметр ArgumentList для задания значения переменной $j.





См. также

Концепции

about_Jobs
about_Job_Details
about_Remote_Jobs
Start-Job
Get-Job
Wait-Job
Stop-Job
Remove-Job
Invoke-Command