Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Назначение: Windows PowerShell 2.0, Windows PowerShell 3.0
РАЗДЕЛ
about_Remote_Jobs
КРАТКОЕ ОПИСАНИЕ
Содержит описание того, как выполнять фоновые задания на удаленных компьютерах.
ПОДРОБНОЕ ОПИСАНИЕ
Фоновое задание — это команда, которая выполняется асинхронно без взаимодействия с текущим сеансом. Командная строка отображается мгновенно, что позволяет продолжать работу в сеансе во время выполнения задания.
По умолчанию фоновые задания выполняются на локальном компьютере. Однако можно использовать несколько различных процедур для выполнения фоновых заданий на удаленных компьютерах.
В этом разделе описано, как выполнить фоновое задание на удаленном компьютере. Подробнее о запуске фоновых заданий на локальном компьютере см. в разделе about_Jobs. Подробнее о фоновых заданиях см. в разделе about_Job_Details.
УДАЛЕННЫЕ ФОНОВЫЕ ЗАДАНИЯ
Фоновые задания можно выполнять на удаленных компьютерах тремя различными способами.
– Создание интерактивного сеанса с удаленным компьютером и запуск задания в этом сеансе. Процедуры аналогичны выполнению локального задания, хотя все действия выполняются на удаленном компьютере.
– Выполнение фонового задания на удаленном компьютере, который возвращает результаты на локальный компьютер. Используйте этот способ при необходимости сбора результатов выполнения фоновых заданий и сохранения их в центральном местоположении на локальном компьютере.
– Выполнение фонового задания на удаленном компьютере с сохранением на нем результатов. Используйте этот способ, если требуется более надежное хранение данных задания на компьютере, на котором они были получены.
ЗАПУСК ФОНОВОГО ЗАДАНИЯ В ИНТЕРАКТИВНОМ СЕАНСЕ
Можно начать интерактивный сеанс с удаленным компьютером и запустить фоновое задание в этом сеансе. Подробнее об интерактивных сеансах см. в разделах about_Remote и Enter-PSSession.
Процедура запуска фонового задания в интерактивном сеансе практически идентична процедуре запуска фонового задания на локальном компьютере. Однако все операции выполняются на удаленном, а не на локальном компьютере.
ШАГ 1. ENTER-PSSESSION
Используйте командлет Enter-PSSession, чтобы начать интерактивный сеанс с удаленным компьютером. Вы можете использовать параметр ComputerName командлета Enter-PSSession для установления временного подключения к интерактивному сеансу. Или можно использовать параметр Session для запуска интерактивного сеанса в сеансе Windows PowerShell® (PSSession).
Приведенная ниже команда запускает интерактивный сеанс на компьютере Server01.
C:\PS> Enter-PSSession -computername Server01
Командная строка изменяется, указывая на то, что установлено подключение к компьютеру Server01.
Server01\C:>
ШАГ 2. START-JOB
Используйте командлет Start-Job, чтобы запустить фоновое задание в сеансе.
Приведенная ниже команда запускает фоновое задание, которое получает события в журнале событий Windows PowerShell на компьютере Server01. Командлет Start-Job возвращает объект, представляющий задание.
Эта команда сохраняет объект задания в переменной $job.
Server01\C:> $job = start-job -scriptblock {get-eventlog "Windows PowerShell"}
Во время выполнения задания можно использовать интерактивный сеанс для выполнения других команд, включая другие фоновые задания. Однако интерактивный сеанс должен оставаться открытым до завершения задания. В случае завершения сеанса задание прерывается и результаты теряются.
ШАГ 3. GET-JOB
Чтобы проверить, выполнено ли задание, отобразите значение переменной $job или используйте командлет Get-Job для получения задания. В приведенной ниже команде используется командлет Get-Job для отображения задания.
Server01\C:> get-job $job
SessionId Name State HasMoreData Location Command
--------- ---- ----- ----------- -------- -------
1 Job1 Complete True localhost get-eventlog "Windows PowerShell"
Выходные данные командлета Get-Job показывают, что задание выполняется на компьютере localhost, так как задание было запущено и выполняется на одном и том же компьютере (в этом случае на компьютере Server01).
ШАГ 4. RECEIVE-JOB
Чтобы получить результаты задания, используйте командлет Receive-Job. Результаты можно отобразить в интерактивном сеансе или сохранить в файле на удаленном компьютере. Приведенная ниже команда получает результат выполнения задания, сохраненного в переменной $job. Оператор перенаправления (>) используется для сохранения результатов выполнения задания в файле PsLog.txt на компьютере Server01.
Server01\C:> receive-job $job > c:\logs\PsLog.txt
ШАГ 5. EXIT-PSSESSION
Используйте командлет Exit-PSSession, чтобы завершить интерактивный сеанс. Командная строка изменится, указывая, что выполнен возврат к исходному сеансу на локальном компьютере.
Server01\C:> Exit-PSSession
C:\PS>
ШАГ 6. INVOKE-COMMAND: GET-CONTENT
Для просмотра содержимого файла PsLog.txt на компьютере Server01 в любое время начните другой интерактивный сеанс или выполните удаленную команду. Команду этого типа лучше всего выполнять в сеансе PSSession (постоянное подключение), если требуется использовать несколько команд для просмотра данных в файле PsLog.txt и управления ими. Подробнее о PSSessions см. в разделе about_PSSessions.
В приведенных ниже командах используется командлет New-PSSession для создания сеанса PSSession, который подключается к компьютеру Server01, и командлет Invoke-Command для выполнения команды Get-Content в сеансе PSSession с целью просмотра содержимого файла.
C:\PS> $s = new-pssession -computername Server01
C:\PS> invoke-command -session $s -scriptblock {get-content c:\logs\pslog.txt}
ЗАПУСК УДАЛЕННОГО ЗАДАНИЯ, ВОЗВРАЩАЮЩЕГО РЕЗУЛЬТАТЫ НА ЛОКАЛЬНЫЙ КОМПЬЮТЕР (ASJOB)
Чтобы запустить фоновое задание на удаленном компьютере, возвращающем результаты выполнения команды на локальный компьютер, используйте параметр AsJob какого-либо командлета, например командлета Invoke-Command.
При использовании параметра AsJob объект задания создается на локальном компьютере, даже если само задание выполняется на удаленном компьютере. После завершения задания результаты возвращаются на локальный компьютер.
Для управления любым заданием, созданным любым командлетом, можно использовать командлеты, в именах которых содержится существительное Job (командлеты Job). Многие командлеты, имеющие параметры AsJob, не используют удаленное взаимодействие Windows PowerShell, поэтому их можно использовать даже на компьютерах, которые не настроены на удаленное взаимодействие и не соответствуют требованиям для удаленного взаимодействия.
ШАГ 1. INVOKE-COMMAND -ASJOB
В приведенной ниже команде с помощью параметра AsJob командлета Invoke-Command запускается фоновое задание на компьютере Server01. Задание выполняет команду Get-Eventlog, которая получает события в журнале системы. Вы можете использовать параметр JobName, чтобы назначить заданию отображаемое имя.
invoke-command -computername Server01 -scriptblock {get-eventlog system} -asjob
Результаты выполнения команды должны выглядеть примерно следующим образом:
SessionId Name State HasMoreData Location Command
--------- ---- ----- ----------- -------- -------
1 Job1 Running True Server01 get-eventlog system
При использовании параметра AsJob командлет Invoke-Command возвращает объект задания, который имеет такой же тип, что и тип объекта, возвращаемого командлетом Start-Job. Объект задания можно сохранить в переменной, или можно использовать команду Get-Job для получения задания.
Обратите внимание, что значение свойства Location указывает, что задание выполнялось на компьютере Server01.
ШАГ 2. GET-JOB
Для управления заданием, запущенным с помощью параметра AsJob командлета Invoke-Command, используйте командлеты Job. Так как объект, представляющий удаленное задание, находится на локальном компьютере, выполнять удаленные команды для управления заданием не требуется.
Чтобы определить, выполнено ли задание, используйте команду Get-Job. Приведенная ниже команда получает все задания, запущенные в текущем сеансе.
get-job
Так как удаленное задание было запущено в текущем сеансе, локальная команда Get-Job получает задание. Свойство State объекта задания показывает, что команда выполнена успешно.
SessionId Name State HasMoreData Location Command
--------- ---- ----- ----------- -------- -------
1 Job1 Completed True Server01 get-eventlog system
ШАГ 3. RECEIVE-JOB
Чтобы получить результаты задания, используйте командлет Receive-Job. Так как результаты выполнения задания автоматически возвращаются на компьютер, где находится объект задания, их можно получить с помощью локальной команды Receive-Job.
В приведенной ниже команде для получения результатов задания используется командлет Receive-Job. Для определения задания используется идентификатор сеанса. Эта команда сохраняет результаты задания в переменной $results. Кроме того, результаты можно перенаправить в файл.
$results = receive-job -id 1
ЗАПУСК УДАЛЕННОГО ЗАДАНИЯ С СОХРАНЕНИЕМ РЕЗУЛЬТАТОВ НА УДАЛЕННОМ КОМПЬЮТЕРЕ
Чтобы запустить фоновое задание на удаленном компьютере с сохранением на нем результатов выполнения команды, используйте командлет Invoke-Command для выполнения команды Start-Job на удаленном компьютере. Этот способ можно использовать для выполнения фоновых заданий на нескольких компьютерах.
При удаленном запуске команды Start-Job объект задания создается на удаленном компьютере и результаты выполнения задания сохраняются на удаленном компьютере. С точки зрения задания все операции являются локальными. Пользователь просто выполняет команды удаленно для управления локальным заданием на удаленном компьютере.
ШАГ 1. INVOKE-COMMAND START-JOB
Используйте командлет Invoke-Command, чтобы выполнить команду Start-Job на удаленном компьютере.
Для этой команды требуется сеанс PSSession (постоянное подключение). При использовании параметра ComputerName командлета Invoke-Command для установления временного подключения команда Invoke-Command считается выполненной, если объект задания возвращен. В результате временное подключение закрывается, и задание отменяется.
В приведенной ниже команде с помощью командлета New-PSSession создается сеанс PSSession, подключенный к компьютеру Server01. Сеанс PSSession сохраняется в переменную $s.
$s = new-pssession -computername Server01
В приведенной ниже команде с помощью командлета Invoke-Command выполняется команда Start-Job в сеансе PSSession. Команды Start-Job и Get-Eventlog заключаются в фигурные скобки.
invoke-command -session $s -scriptblock {start-job -scriptblock {get-eventlog system}}
Результаты должны выглядеть примерно следующим образом:
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
2 Job2 Running True Localhost get-eventlog system
При удаленном выполнении команды Start-Job командлет Invoke-Command возвращает объект задания, который имеет такой же тип, что и тип объекта, возвращаемого командлетом Start-Job. Объект задания можно сохранить в переменной, или можно использовать команду Get-Job для получения задания.
Обратите внимание, что значение свойства Location указывает, что задание выполнялось на локальном компьютере LocalHost, несмотря на то что в действительности оно выполнялось на компьютере Server01. Так как объект задания создается на компьютере Server01 и задание выполняется на этом же компьютере, оно считается локальным фоновым заданием.
ШАГ 2. INVOKE-COMMAND GET-JOB
Для управления удаленным фоновым заданием используйте командлеты Job. Так как объект задания находится на удаленном компьютере, необходимо выполнять удаленные команды для получения, остановки, ожидания или извлечения результатов выполнения задания.
Чтобы определить, выполнено ли задание, используйте командлет Invoke-Command для выполнения команды Get-Job в сеансе PSSession, подключенном к компьютеру Server01.
invoke-command -session $s -scriptblock {get-job}
Команда возвращает объект задания. Свойство State объекта задания показывает, что команда выполнена успешно.
SessionId Name State HasMoreData Location Command
--------- ---- ----- ----------- -------- -------
2 Job2 Completed True LocalHost get-eventlog system
ШАГ 3. INVOKE-COMMAND RECEIVE-JOB
Чтобы получить результаты выполнения задания, используйте командлет Invoke-Command для выполнения команды Receive-Job в сеансе PSSession, подключенном к компьютеру Server01.
В приведенной ниже команде для получения результатов задания используется командлет Receive-Job. Для определения задания используется идентификатор сеанса. Эта команда сохраняет результаты задания в переменной $results. Параметр Keep командлета Receive-Job используется для сохранения результата в кэше заданий на удаленном компьютере.
$results = invoke-command -session $s -scriptblock {receive-job -sessionid 2 -keep}
Кроме того, можно перенаправить результаты в файл на локальном или удаленном компьютере. В приведенной ниже команде используется оператор перенаправления для сохранения результатов в файле на компьютере Server01.
invoke-command -session $s -command {receive-job -sessionid 2 > c:\logs\pslog.txt}
СМ. ТАКЖЕ
about_Jobs
about_Job_Details
about_Remote
about_Remote_Variables
Invoke-Command
Start-Job
Get-Job
Wait-Job
Stop-Job
Remove-Job
New-PSSession
Enter-PSSession
Exit-PSSession