РАЗДЕЛ about_Job_Details КРАТКОЕ ОПИСАНИЕ Содержит сведения о фоновых заданиях на локальных и удаленных компьютерах. ПОДРОБНОЕ ОПИСАНИЕ В этом разделе описаны принципы работы фоновых заданий и приведены технические сведения о работе фоновых заданий в Windows PowerShell. Этот раздел дополняет разделы about_Jobs и about_Remote_Jobs. Важно: фоновые задания, запущенные с помощью команды Start-Job или параметра AsJob команды Invoke-Command, используют инфраструктуру удаленного взаимодействия Windows PowerShell. Для использования этих функций необходимо настроить в Windows PowerShell удаленное взаимодействие, даже если фоновое задание выполняется только на локальном компьютере. Дополнительные сведения см. в разделе about_Remote_Requirements. ФОНОВЫЕ ЗАДАНИЯ Фоновое задание выполняет команду или выражение асинхронно. Оно может выполнять командлеты, функции, скрипты или другие задачи на базе команд. Фоновые задания предназначены для запуска команд, выполнение которых занимает продолжительное время, но их можно использовать для запуска любых команд в фоновом режиме. При выполнении синхронной команды командная строка Windows PowerShell отключается, пока команда не будет завершена, в то время как при использовании фоновых задании командная строка Windows PowerShell не отключается. Команда, запускающая фоновое задание, возвращает объект задания. Командная строка становится доступной сразу же, поэтому во время выполнения фонового задания можно работать с другими задачами. Однако при запуске фонового задания результаты не возвращаются немедленно, даже если задание выполняется очень быстро. Возвращаемый объект задания содержит полезные сведения о задании, но не содержит результатов выполнения задания. Необходимо выполнить отдельную команду, чтобы получить результаты задания. Кроме того, можно выполнить команду, чтобы остановить задание, дождаться завершения задания или удалить задание. Чтобы синхронизация фонового задания не зависела от других команд, каждое фоновое задание выполняется в собственной среде Windows PowerShell ("сеансе"). Это может быть как временное подключение, которое создается только для выполнения задания, а потом уничтожается, так и постоянный сеанс (PSSession), который можно использовать для выполнения нескольких связанных заданий и команд. ИСПОЛЬЗОВАНИЕ КОМАНДЛЕТОВ JOB Для запуска фонового задания на локальном компьютере служит команда 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 или параметра AsJob командлета Invoke-Command, родительское задание является ведущим. Оно не выполняет никаких команд и не возвращает никаких результатов. Реальные команды выполняются дочерними заданиями. (Задания, запускаемые с помощью других командлетов, могут работать иначе.) Дочерние задания хранятся в свойстве ChildJobs объекта родительского задания. Свойство ChildJobs может содержать один или несколько объектов дочерних заданий. У объектов дочерних заданий имеются имя, идентификатор и идентификатор экземпляра, которые отличаются от родительского задания, поэтому родительскими и дочерними заданиями можно управлять по отдельности или как единым целым. Чтоб определить родительские и дочерние задания внутри задания, следует использовать командлет Get-Job, чтобы получить родительское задание, а затем по конвейеру передать это задание команде Format-List, которая выведет значения свойств Name и ChildJobs объектов, как показано в следующей команде. C:\PS> get-job | format-list -property Name, ChildJobs Name : Job1 ChildJobs : {Job2} Кроме того, можно использовать команду Get-Job с дочерним заданием, как показано ниже: C:\PS> get-job job2 Id Name State HasMoreData Location Command -- ---- ----- ----------- -------- ------- 2 Job2 Completed True localhost get-process Конфигурация дочернего задания зависит от команды, с помощью которой запускается задание. -- При запуске задания на локальном компьютере с помощью команды Start-Job задание состоит из ведущего родительского задания и дочернего задания, которое выполняет команды. -- При запуске задания на одном или нескольких компьютерах с помощью параметра AsJob команды Invoke-Command задание состоит из ведущего родительского задания и дочернего задания для каждого задания, выполняемого на каждом из компьютеров. -- При выполнении команды Start-Job на одном или нескольких удаленных компьютерах с помощью команды Invoke-Command результат не отличается от выполнения локальной команды на каждом из удаленных компьютеров. Команда возвращает объект задания для каждого компьютера. Объект задания состоит из ведущего родительского задания и одного дочернего задания, которое выполняет команду. Родительское задание представляет все дочерние задания. При управлении родительским заданием также происходит управление связанными с ним дочерними заданиями. Например, если остановить родительское задание, все дочерние задания также будут остановлены. Если получить результаты родительского задания, будут получены результаты всех дочерних заданий. Однако дочерними заданиями можно управлять и по отдельности. Это бывает особенно полезно, если требуется разобраться в проблеме с заданием или получить результаты только для одного из нескольких дочерних заданий, запущенных с помощью параметра AsJob командлета Invoke-Command. (Обратный апостроф (`) является знаком продолжения строки.) В следующей команде с помощью параметра AsJob командлета Invoke-Command запускаются фоновые задания на локальном компьютере и двух удаленных компьютерах. Команда сохраняет задание в переменной $j. C:\PS> $j = invoke-command -computername localhost, Server01, Server02 ` -command {get-date} -AsJob При отображении свойств Name и ChildJob задания в переменной $j видно, что команда вернула объект задания с тремя дочерними заданиями, по одному на каждый компьютер. C:\PS> $j | format-list name, childjobs Name : Job3 ChildJobs : {Job4, Job5, Job6} При отображении родительского задания видно, что задание закончилось сбоем. C:\PS> $j Id Name State HasMoreData Location Command -- ---- ----- ----------- -------- ------- 1 Job3 Failed True localhost,server... get-date Однако при выполнении команды Get-Job для каждого из дочерних заданий становится понятно, что сбоем закончилось только одно задание. PS C:\ps-test> get-job job4, job5, job6 Id Name State HasMoreData Location Command -- ---- ----- ----------- -------- ------- 4 Job4 Completed True localhost get-date 5 Job5 Failed False Server01 get-date 6 Job6 Completed True Server02 get-date Чтобы получить результаты всех дочерних заданий, необходимо с помощью командлета Receive-Job получить результаты родительского задания. Но можно также получить результаты конкретного дочернего задания, как показано в следующей команде. C:\PS> receive-job -job6 -keep | format-table ComputerName, DateTime -auto ComputerName DateTime ------------ -------- Server02 Четверг, 13 марта 2008 г., 16:16:03 Поддержка дочерних заданий в фоновых заданиях Windows PowerShell обеспечивает более широкие возможности управления выполняемыми заданиями. СМ. ТАКЖЕ about_Jobs about_Remote_Jobs about_Remote Invoke-Command Start-Job Get-Job Wait-Job Stop-Job Remove-Job New-PSSession Enter-PSSession Exit-PSSession