РАЗДЕЛ
  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




Содержание