about_Job_Details
Краткое описание
Содержит сведения о фоновых заданиях на локальных и удаленных компьютерах.
Подробное описание
В этом разделе объясняется концепция фонового задания и технические сведения о работе фоновых заданий в PowerShell.
Этот раздел является дополнением к темам about_Jobs, about_Thread_Jobs и about_Remote_Jobs .
О фоновых заданиях
Фоновое задание выполняет команду или выражение асинхронно. Он может выполнять командлет, функцию, скрипт или любую другую задачу на основе команд. Он предназначен для выполнения команд, которые занимают длительный период времени, но его можно использовать для выполнения любой команды в фоновом режиме.
Когда выполняется синхронная команда, командная строка PowerShell подавляется до завершения команды. Но фоновое задание не подавляет запрос PowerShell. Команда для запуска фонового задания возвращает объект задания. Запрос возвращается немедленно, чтобы вы могли работать над другими задачами во время выполнения фонового задания.
Однако при запуске фонового задания результаты не получаются сразу, даже если задание выполняется очень быстро. Возвращаемый объект задания содержит полезные сведения о задании, но не содержит результатов задания. Чтобы получить результаты задания, необходимо выполнить отдельную команду. Вы также можете выполнить команды, чтобы остановить задание, дождаться завершения задания и удалить задание.
Чтобы сделать время фонового задания независимо от других команд, каждое фоновое задание выполняется в собственном сеансе PowerShell. Однако это может быть временное соединение, созданное только для запуска задания и затем уничтоженное, или это может быть постоянное подключение PSSession , которое можно использовать для выполнения нескольких связанных заданий или команд.
Использование командлетов заданий
Используйте команду, чтобы запустить фоновое Start-Job
задание на локальном компьютере.
Start-Job
возвращает объект задания. Можно также получить объекты, представляющие задания, запущенные на локальном компьютере, с помощью командлета Get-Job
.
Чтобы получить результаты задания, используйте Receive-Job
команду. Если задание не завершено, Receive-Job
возвращает частичные результаты. Командлет можно также использовать Wait-Job
для подавления командной строки до тех пор, пока не будет завершено одно или все задания, которые были запущены в сеансе.
Чтобы остановить фоновое задание, используйте Stop-Job
командлет. Чтобы удалить задание, используйте Remove-Job
командлет.
Дополнительные сведения о работе командлетов см. в разделе справки для каждого командлета и about_Jobs.
Запуск фоновых заданий на удаленных компьютерах
Вы можете создавать фоновые задания и управлять ими на локальном или удаленном компьютере. Для удаленного выполнения фонового задания используйте параметр AsJob для командлета, например Invoke-Command
командлет, или используйте Invoke-Command
командлет для удаленного Start-Job
выполнения команды. Вы также можете запустить фоновое задание в интерактивном сеансе.
Дополнительные сведения о удаленных фоновых заданиях см. в about_Remote_Jobs.
Дочерние задания
Каждое фоновое задание состоит из родительского задания и одного или нескольких дочерних заданий. В заданиях, запущенных с помощью Start-Job
или параметра Invoke-Command
AsJob, родительское задание является исполнительным. Он не выполняет никаких команд или не возвращает результаты. Команды фактически выполняются дочерними заданиями. Задания, запущенные с помощью других командлетов, могут работать по-другому.
Дочерние задания хранятся в свойстве ChildJobs родительского объекта задания. Свойство ChildJobs может содержать один или несколько дочерних объектов задания. Дочерние объекты задания имеют имя, идентификатор и идентификатор экземпляра , которые отличаются от родительского задания, чтобы управлять родительскими и дочерними заданиями по отдельности или как единицей.
Чтобы получить родительские и дочерние задания задания задания, используйте параметр IncludeChildJobs командлета Get-Job
. Параметр IncludeChildJob появился в Windows PowerShell 3.0.
PS> Get-Job -IncludeChildJob
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 RemoteJob Failed True localhost Get-Process
2 Job2 Completed True Server01 Get-Process
3 Job3 Failed False localhost Get-Process
Чтобы получить родительское задание и только дочерние задания с определенным значением состояния , используйте параметр ChildJobState командлета Get-Job
. Параметр ChildJobState появился в Windows PowerShell 3.0.
PS> Get-Job -ChildJobState Failed
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 RemoteJob Failed True localhost Get-Process
3 Job3 Failed False localhost Get-Process
Чтобы получить дочерние задания задания во всех версиях PowerShell, используйте свойство ChildJob родительского задания.
PS> (Get-Job Job1).ChildJobs
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 Job2 Completed True Server01 Get-Process
3 Job3 Failed False localhost Get-Process
Вы также можете использовать Get-Job
команду в дочернем задании, как показано в следующей команде:
PS> Get-Job Job3
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
3 Job3 Failed False localhost Get-Process
Конфигурация дочернего задания зависит от команды, используемой для запуска задания.
При запуске
Start-Job
задания на локальном компьютере задание состоит из исполнительного родительского задания и дочернего задания, выполняющего команду.При использовании параметра
Invoke-Command
AsJob для запуска задания на одном или нескольких компьютерах задание состоит из исполнительного родительского задания и дочернего задания для каждого задания, выполняемого на каждом компьютере.При выполнении
Invoke-Command
Start-Job
команды на одном или нескольких удаленных компьютерах результат совпадает с локальной командой, выполняемой на каждом удаленном компьютере. Команда возвращает объект задания для каждого компьютера. Объект задания состоит из исполнительного родительского задания и одного дочернего задания, выполняющего команду.
Родительское задание представляет все дочерние задания. При управлении родительским заданием вы также управляете связанными дочерними заданиями. Например, если остановить родительское задание, все дочерние задания будут остановлены. Если вы получите результаты родительского задания, вы получите результаты всех дочерних заданий.
Однако вы также можете управлять дочерними заданиями по отдельности. Это наиболее полезно, если вы хотите изучить проблему с заданием или получить результаты только одного из нескольких дочерних заданий, запущенных с помощью параметра Invoke-Command
AsJob.
Следующая команда использует параметр AsJob для Invoke-Command
запуска фоновых заданий на локальном компьютере и двух удаленных компьютерах. Команда сохраняет задание в переменной $j
.
PS> $j = Invoke-Command -ComputerName localhost, Server01, Server02 `
-Command {Get-Date} -AsJob
При отображении свойств задания Name и ChildJob в нем показано, что команда вернула объект задания $j
с тремя дочерними заданиями, по одному для каждого компьютера.
PS> $j | Format-List Name, ChildJobs
Name : Job3
ChildJobs : {Job4, Job5, Job6}
При отображении родительского задания он показывает, что задание завершилось сбоем.
PS> $j
Id Name PSJobTypeName State HasMoreData Location
-- ---- ------------- ----- ----------- --------
3 Job3 RemotingJob Failed False localhost,Server...
Но при выполнении Get-Job
команды, которая получает дочерние задания, выходные данные показывают, что не удалось выполнить только одно дочернее задание.
PS> Get-Job -IncludeChildJobs
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
3 Job3 RemotingJob Failed False localhost,Server...
4 Job4 Completed True localhost Get-Date
5 Job5 Failed False Server01 Get-Date
6 Job6 Completed True Server02 Get-Date
Чтобы получить результаты всех дочерних заданий, используйте Receive-Job
командлет, чтобы получить результаты родительского задания. Но вы также можете получить результаты определенного дочернего задания, как показано в следующей команде.
PS> Receive-Job -Name Job6 -Keep | Format-Table ComputerName,
>> DateTime -AutoSize
ComputerName DateTime
------------ --------
Server02 Thursday, March 13, 2008 4:16:03 PM
Функция дочерних заданий фоновых заданий PowerShell позволяет более контролировать выполняемые задания.
Типы должностей
PowerShell поддерживает различные типы заданий для различных задач. Начиная с Windows PowerShell 3.0 разработчики могут писать "адаптеры источника заданий", которые добавляют новые типы заданий в PowerShell и включают исходные адаптеры заданий в модули. При импорте модуля можно использовать новый тип задания в сеансе.
Например, модуль PSScheduledJob добавляет запланированные задания, а модуль PSWorkflow добавляет задания рабочего процесса.
Пользовательские типы заданий могут значительно отличаться от стандартных фоновых заданий PowerShell. Например, запланированные задания сохраняются на диске; они не существуют только в определенном сеансе. Задания рабочего процесса можно приостановить и возобновить.
Командлеты, используемые для управления пользовательскими заданиями, зависят от типа задания. Для некоторых из этих командлетов используются стандартные командлеты заданий, например Get-Job
и Start-Job
. Другие приходят с специализированными командлетами, которые управляют только определенным типом задания. Подробные сведения о пользовательских типах заданий см. в разделах справки о типе задания.
Чтобы найти тип задания, используйте Get-Job
командлет. Get-Job
возвращает различные объекты заданий для различных типов заданий. Значение свойства PSJobTypeName объектов задания, возвращающих Get-Job
тип задания.
В следующей таблице перечислены типы заданий, которые входят в PowerShell.
Тип вакансии | Description |
---|---|
Фоновое задание | Начало работы с командлетом Start-Job . |
RemoteJob | Начало работы с параметром AsJob объекта |
Invoke-Command . |
|
PSWorkflowJob | Начал использовать параметр AsJob рабочего процесса. |
PSScheduledJob | Экземпляр запланированного задания, запущенного триггером задания. |
CIMJob | Начало работы с параметром AsJob командлета из |
Модуль CDXML. | |
WMIJob | Начало работы с параметром AsJob командлета из |
Модуль WMI. | |
PSEventJob | Создано с помощьюRegister-ObjectEvent и указанием |
действие с параметром Action . |
ПРИМЕЧАНИЕ. Прежде чем использовать Get-Job
командлет для получения заданий определенного типа, убедитесь, что модуль, добавляющий тип задания, импортируется в текущий сеанс.
Get-Job
В противном случае не получает задания этого типа.
Примеры
Следующие команды создают локальное фоновое задание, удаленное фоновое задание, задание рабочего процесса и запланированное задание. Затем он использует Get-Job
командлет для получения заданий. Get-Job
не получает запланированное задание, но получает все экземпляры запланированного задания.
Запустите фоновое задание на локальном компьютере.
PS> Start-Job -Name LocalData {Get-Process}
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 LocalData BackgroundJob Running True localhost Get-Process
Запустите фоновое задание, которое выполняется на удаленном компьютере.
PS> Invoke-Command -ComputerName Server01 {Get-Process} `
-AsJob -JobName RemoteData
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 RemoteData RemoteJob Running True Server01 Get-Process
Создание запланированного задания
PS> Register-ScheduledJob -Name ScheduledJob -ScriptBlock `
{Get-Process} -Trigger (New-JobTrigger -Once -At "3 PM")
Id Name JobTriggers Command Enabled
-- ---- ----------- ------- -------
1 ScheduledJob 1 Get-Process True
Создайте рабочий процесс.
PS> workflow Test-Workflow {Get-Process}
Запустите рабочий процесс в качестве задания.
PS> Test-Workflow -AsJob -JobName TestWFJob
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 TestWFJob PSWorkflowJob NotStarted True localhost Get-Process
Получение заданий. Команда Get-Job
не получает запланированные задания, но получает экземпляры запланированного задания, запущенного.
PS> Get-Job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 LocalData BackgroundJob Completed True localhost Get-Process
4 RemoteData RemoteJob Completed True Server01 Get-Process
6 TestWFJob PSWorkflowJob Completed True localhost WorkflowJob
8 ScheduledJob PSScheduledJob Completed True localhost Get-Process
Чтобы получить запланированные задания, используйте Get-ScheduledJob
командлет.
PS> Get-ScheduledJob
Id Name JobTriggers Command Enabled
-- ---- ----------- ------- -------
1 ScheduledJob 1 Get-Process True
См. также
PowerShell