Выполняет команды на локальном и удаленных компьютерах.

Синтаксис

Invoke-Command [-ScriptBlock] <scriptblock> [[-ComputerName] <string[]>] [-ApplicationName <string>] [-AsJob] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-CertificateThumbprint <string>] [-ConfigurationName <string>] [-Credential <PSCredential>] [-HideComputerName] [-JobName <string>] [-Port <int>] [-SessionOption <PSSessionOption>] [-ThrottleLimit <int>] [-UseSSL] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Invoke-Command [-FilePath] <string> [[-ComputerName] <string[]>] [-ApplicationName <string>] [-AsJob] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-ConfigurationName <string>] [-Credential <PSCredential>] [-HideComputerName] [-JobName <string>] [-Port <int>] [-SessionOption <PSSessionOption>] [-ThrottleLimit <int>] [-UseSSL] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Invoke-Command [-FilePath] <string> [[-Session] <PSSession[]>] [-AsJob] [-HideComputerName] [-JobName <string>] [-ThrottleLimit <int>] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Invoke-Command [-FilePath] <string> [[-ConnectionURI] <Uri[]>] [-AllowRedirection] [-AsJob] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-ConfigurationName <string>] [-Credential <PSCredential>] [-HideComputerName] [-JobName <string>] [-SessionOption <PSSessionOption>] [-ThrottleLimit <int>] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Invoke-Command [-ScriptBlock] <scriptblock> [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Invoke-Command [-ScriptBlock] <scriptblock> [[-Session] <PSSession[]>] [-AsJob] [-HideComputerName] [-JobName <string>] [-ThrottleLimit <int>] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Invoke-Command [-ScriptBlock] <scriptblock> [[-ConnectionURI] <Uri[]>] [-AllowRedirection] [-AsJob] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-CertificateThumbprint <string>] [-ConfigurationName <string>] [-Credential <PSCredential>] [-HideComputerName] [-JobName <string>] [-SessionOption <PSSessionOption>] [-ThrottleLimit <int>] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Описание

Командлет Invoke-Command выполняет команды на локальном или удаленном компьютере и возвращает все выходные данные команд, включая ошибки. С помощью одной команды Invoke-Command можно выполнять команды на нескольких компьютерах.

Для выполнения одной команды на удаленном компьютере следует использовать параметр ComputerName. Чтобы выполнить последовательность команд, совместно использующих данные, создайте сеанс PSSession (постоянное подключение) на удаленном компьютере и используйте параметр Session командлета Invoke-Command для выполнения команды в рамках PSSession.

Также можно использовать Invoke-Command на локальном компьютере для анализа или выполнения строки или блока скрипта как команды. Windows PowerShell преобразует блок скрипта в команду и немедленно выполняет эту команду в рамках текущего сеанса вместо отображения текста строки в командной строке.

Перед использованием Invoke-Command для выполнения команд на удаленном компьютере ознакомьтесь с разделом about_Remote.

Параметры

-AllowRedirection

Разрешает перенаправление данного соединения на альтернативный URI.

При использовании параметра ConnectionURI удаленный узел может вернуть инструкцию с перенаправлением на другой URI. По умолчанию Windows PowerShell не перенаправляет соединения, но можно воспользоваться параметром AllowRedirection и разрешить перенаправление соединений.

Кроме того, можно ограничить число операций перенаправления подключения, присвоив соответствующее значение свойству MaximumConnectionRedirectionCount привилегированной переменной $PSSessionOption или свойству MaximumConnectionRedirectionCount значения параметра SessionOption. По умолчанию используется значение 5. Дополнительные сведения см. в описании параметра SessionOption и в разделе справки для командлета New-PSSessionOption.

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

false

Позиция?

named

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

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

false

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

false

-ApplicationName <string>

Задает сегмент имени приложения в URI подключения. Этот параметр служит для указания имени приложения, если в команде не используется параметр ConnectionURI.

По умолчанию используется значение привилегированной переменной $PSSessionApplicationName на локальном компьютере. Если эта привилегированная переменная не определена, используется значение по умолчанию "WSMAN". Это значение подходит для большинства случаев. Дополнительные сведения см. в разделе about_Preference_Variables.

Служба WinRM использует имя приложения для выбора прослушивателя для обслуживания запроса подключения. Значение этого параметра должно соответствовать значению свойства URLPrefix прослушивателя на удаленном компьютере.

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

false

Позиция?

named

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

WSMAN

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

true (ByPropertyName)

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

false

-ArgumentList <Object[]>

Значения локальных переменных в команде. Переменные в команде заменяются этими значениями перед выполнением команды на удаленном компьютере. Введите значения, разделенные запятыми. Значения связываются с переменными в порядке перечисления. Псевдоним ArgumentList — "Args".

Параметр ArgumentList может содержать как фактические значения, например "1024", так и локальные переменные, например "$max".

Чтобы использовать в команде локальные переменные, используйте следующий формат команды.

{param($<name1>[, $<name2>]...) <команда-с-локальными-переменными>} -ArgumentList <значение | $локальная-переменная>

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

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

false

Позиция?

named

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

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

false

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

false

-AsJob

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

При использовании параметра AsJob команда возвращает объект, представляющий задание, а затем появляется командная строка. Можно продолжить работу в рамках данного сеанса, пока задание завершается. Чтобы управлять заданием, используйте командлеты Job. Чтобы получить результаты задания, используйте командлет Receive-Job.

Использование параметра AsJob аналогично использованию команды Invoke-Command для удаленного запуска команды Start-Job. Однако при использовании AsJob задание создается на локальном компьютере, хотя и выполняется на удаленном компьютере, а результаты удаленного задания автоматически возвращаются на локальный компьютер.

Дополнительные сведения о фоновых заданиях в Windows PowerShell см. в разделах about_Jobs и about_Remote_Jobs.

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

false

Позиция?

named

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

нет

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

false

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

false

-Authentication <AuthenticationMechanism>

Задает механизм, используемый при проверке подлинности учетных данных пользователя. Допустимые значения: Default, Basic, Credssp, Digest, Kerberos, Negotiate и NegotiateWithImplicitCredential. По умолчанию используется значение "Default".

Проверка подлинности CredSSP доступна только в Windows Vista, Windows Server 2008 и более поздних версиях Windows.

Дополнительные сведения о значениях этого параметра см. в описании перечисления System.Management.Automation.Runspaces.AuthenticationMechanism в библиотеке MSDN.

ВНИМАНИЕ! Проверка подлинности CredSSP, при которой учетные данные пользователя передаются на удаленный компьютер, предназначена для команд, которые должны пройти процедуру проверки подлинности на нескольких ресурсах, например при доступе к удаленному общему сетевому ресурсу. Такой механизм повышает угрозы безопасности удаленных операций. Если безопасность удаленного компьютера нарушена, передаваемые ему учетные данные могут использоваться для управления сетевым сеансом.

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

false

Позиция?

named

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

Default

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

false

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

false

-CertificateThumbprint <string>

Задает цифровой сертификат с открытым ключом (X509) учетной записи пользователя, который располагает разрешением для выполнения этого действия. Введите отпечаток сертификата.

Сертификаты используются при проверке подлинности на основе сертификата клиента. Их можно сопоставить только с учетными записями локальных пользователей; они не работают с учетными записями доменов.

Чтобы получить отпечаток сертификата, воспользуйтесь командой Get-Item или Get-ChildItem в Windows PowerShell на диске Cert:.

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

false

Позиция?

named

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

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

false

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

false

-ComputerName <string[]>

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

При использовании параметра ComputerName Windows PowerShell создает временное подключение, которое используется только для запуска заданной команды и затем закрывается. Если требуется создать постоянное подключение, используйте параметр Session.

Введите имя NETBIOS, IP-адрес или полное доменное имя одного или нескольких компьютеров в виде списка разделенных запятыми значений. Чтобы указать локальный компьютер, введите имя компьютера, "localhost" или точку (.).

Для использования IP-адреса в значении параметра ComputerName в команду необходимо включить параметр Credential. Кроме того, необходимо настроить компьютер на использование транспорта HTTPS или включить IP-адрес удаленного компьютера в список TrustedHosts WinRM на локальном компьютере. Инструкции по добавлению имени компьютера в список TrustedHosts см. в статье "Добавление компьютера в список доверенных узлов" в разделе about_Remote_Troubleshooting.

Примечание. Чтобы включить локальный компьютер в значение параметра ComputerName под управлением Windows Vista и более поздних версий Windows, необходимо запускать Windows PowerShell командой "Запуск от имени администратора".

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

false

Позиция?

1

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

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

true (ByPropertyName)

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

false

-ConfigurationName <string>

Задает конфигурацию нового сеанса PSSession.

Введите имя конфигурации или полный URI ресурса для конфигурации сеанса. Если указано только имя конфигурации, перед ним добавляется следующий URI схемы: http://schemas.microsoft.com/powershell.

Конфигурация сеанса находится на удаленном компьютере. Если указанная конфигурация сеанса не существует на удаленном компьютере, команда завершается с ошибкой.

По умолчанию используется значение привилегированной переменной $PSSessionConfigurationName на локальном компьютере. Если значение этой привилегированной переменной не установлено, используется значение по умолчанию "Microsoft.PowerShell". Дополнительные сведения см. в разделе about_Preference_Variables.

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

false

Позиция?

named

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

http://Schemas.Microsoft.com/PowerShell/Microsoft.PowerShell

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

true (ByPropertyName)

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

false

-ConnectionURI <Uri[]>

Задает универсальный идентификатор ресурса (URI), определяющий конечную точку соединения. Значение URI должно быть указано полностью.

Строка имеет следующий формат:

<Транспорт>://<Имя_компьютера>:<Порт>/<Имя_приложения>

По умолчанию используется следующее значение.

http://localhost:80/WSMAN

Допустимые значения сегмента транспорта в URI: HTTP и HTTPS. Если в команде не указан параметр ConnectionURI, для указания значений URI можно использовать параметры UseSSL, ComputerName, Port и ApplicationName.

Если конечный компьютер перенаправляет соединение на другой URI, Windows PowerShell предотвращает перенаправление, если в команде не задан параметр AllowRedirection.

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

false

Позиция?

1

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

http://localhost:80/wsman

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

true (ByPropertyName)

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

false

-Credential <PSCredential>

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

Введите имя пользователя, например "User01" или "Domain01\User01", или введите переменную, содержащую объект PSCredential, например объект, создаваемый командлетом Get-Credential. При вводе имени пользователя появится приглашение ввести пароль.

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

false

Позиция?

named

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

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

true (ByPropertyName)

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

false

-FilePath <string>

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

При использовании этого параметра Windows PowerShell преобразует указанный файл скрипта в блок скрипта, передает блок скрипта на удаленный компьютер и выполняет его на удаленном компьютере.

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

true

Позиция?

2

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

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

false

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

false

-HideComputerName

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

Этот параметр влияет только на выводимый результат. Это не изменяет объект.

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

false

Позиция?

named

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

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

false

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

false

-InputObject <psobject>

Задает входные данные команды. Введите переменную, содержащую объекты, либо получающую их команду или выражение.

При использовании параметра InputObject следует использовать в значении параметра ScriptBlock автоматическую переменную $input для представления входных объектов.

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

false

Позиция?

named

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

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

true (ByValue)

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

false

-JobName <string>

Задает понятное имя фонового задания. По умолчанию заданиям присваиваются имена "Job<n>", где <n> — порядковый номер. Этот параметр допустим только с параметром AsJob.

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

Чтобы получить дополнительные сведения о фоновых заданиях Windows PowerShell, см. раздел about_Jobs.

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

false

Позиция?

named

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

Job<n>

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

false

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

false

-Port <int>

Задает сетевой порт на удаленном компьютере, используемый для данной команды. По умолчанию используется значение "Порт 80" (HTTP-порт).

Перед использованием альтернативного порта необходимо настроить прослушиватель WinRM на удаленном компьютере на прослушивание этого порта. Чтобы настроить прослушиватель, введите следующие две команды в командной строке Windows PowerShell.

remove-item -path wsman:\Localhost\listener\listener* -recurse

new-item -path wsman:\Localhost\listener -Transport http -Address * -port <номер_порта>

Не используйте параметр Port, если этого можно избежать. Порт, указанный в команде, распространяется на все компьютеры или сеансы, для которых используется эта команда. Параметр альтернативного порта может позволить предотвратить выполнение этой команды на всех компьютерах.

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

false

Позиция?

named

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

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

false

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

false

-ScriptBlock <scriptblock>

Задает выполняемые команды. Чтобы создать блок скрипта, заключите команды в фигурные скобки ( { } ). Это обязательный параметр.

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

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

true

Позиция?

1

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

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

false

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

false

-Session <PSSession[]>

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

При создании сеанса PSSession Windows PowerShell создает постоянное подключение к удаленному компьютеру. Используйте сеанс PSSession для выполнения последовательности связанных команд, работающих с общими данными. Для выполнения одной команды или последовательности несвязанных команд следует использовать параметр ComputerName.

Для создания сеанса PSSession используйте командлет New-PSSession. Дополнительные сведения см. в разделе about_PSSessions.

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

false

Позиция?

1

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

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

true (ByPropertyName)

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

false

-SessionOption <PSSessionOption>

Устанавливает расширенные параметры сеанса. Введите объект SessionOption, созданный с помощью командлета New-PSSessionOption.

Значения по умолчанию для параметров определяются значением привилегированной переменной $PSSessionOption, если оно задано. В противном случае в сеансе используются системные значения по умолчанию.

Описание параметров сеанса, включая значения по умолчанию, см. в разделе справки для командлета New-PSSessionOption. Дополнительные сведения о привилегированной переменной $PSSessionOption см. в разделе about_Preference_Variables.

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

false

Позиция?

named

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

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

false

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

false

-ThrottleLimit <int>

Задает максимальное количество одновременных соединений, которые могут быть установлены для выполнения данной команды. Если этот параметр не задан или для него введено значение 0, используется значение по умолчанию 32.

Ограничение скорости относится только к текущей команде, но не к сеансу или компьютеру.

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

false

Позиция?

named

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

32

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

false

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

false

-UseSSL

Использует протокол SSL (Secure Sockets Layer) для установки подключения к удаленному компьютеру. По умолчанию SSL не используется.

Протокол WS-Management шифрует все передаваемое по сети содержимое Windows PowerShell. UseSSL — это дополнительная мера защиты, которая позволяет передавать данные по протоколу HTTPS, а не HTTP.

Если используется этот параметр, но установить SSL-соединение с портом, указанным в команде, не удается, команда завершается с ошибкой.

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

false

Позиция?

named

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

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

false

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

false

<CommonParameters>

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

Ввод и вывод

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

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

System.Management.Automation.ScriptBlock

Можно передать команду командлету Invoke-Command в блоке скрипта по конвейеру. Для представления входных объектов команды следует использовать автоматическую переменную $input.

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

System.Management.Automation.PSRemotingJob или результат, созданный выполненной командой

При использовании параметра AsJob командлет Invoke-Command возвращает объект задания. В противном случае он возвращает результат, созданный выполненной командой (значением параметра ScriptBlock).

Примечания

-- Чтобы использовать параметр ComputerName командлета Invoke-Command для выполнения команды на локальном компьютере под управлением Windows Vista и более поздних версий Windows, необходимо запускать Windows PowerShell командой "Запуск от имени администратора".

-- При выполнении команд на нескольких компьютерах Windows PowerShell подключается к компьютерам в том порядке, в котором они указаны в списке. Результаты выполнения команд отображаются в порядке поступления результатов от удаленных компьютеров, который может отличаться от порядка выполнения команд.

-- Ошибки, возникающие при выполнении команд с помощью командлета Invoke-Command, отображаются в результатах выполнения команд. Ошибки, которые были бы прерывающими при локальном выполнении команды, обрабатываются как непрерывающие при удаленном выполнении команды. Такой подход позволяет избежать ситуации, в которой прерывающие ошибки на одном компьютере прервут выполнение команды на всех остальных компьютерах. Данное утверждение справедливо даже при удаленном выполнении команды на одном компьютере.

-- Если удаленный компьютер не входит в домен, которому доверяет локальный компьютер, этот компьютер может оказаться неспособным выполнить проверку подлинности учетных данных пользователя. Чтобы добавить удаленный компьютер в список "доверенных узлов" в WS-Management, используйте следующую команду в поставщике WSMAN, где <Remote-Computer-Name> — имя удаленного компьютера:

set-item -path wsman:\Localhost\Client\TrustedHosts -value <имя_удаленного_компьютера>.

Пример 1

C:\PS>invoke-command -filepath c:\scripts\test.ps1 -computerName Server01

Disks: C:, D:, E:
Status: Warning, Normal, Normal

Описание
-----------
Эта команда выполняет скрипт Test.ps1 на компьютере Server01. 

Команда использует параметр FilePath для указания скрипта, который расположен на локальном компьютере. Скрипт выполняется на удаленном компьютере и возвращает результаты на локальный компьютер.






Пример 2

C:\PS>invoke-command -computername server01 -credential domain01\user01 -scriptblock {get-culture}

Описание
-----------
Эта команда выполняет команду Get-Culture на удаленном компьютере Server01. 

Параметр ComputerName используется для задания имени компьютера, а параметр Credential — для выполнения команды в контексте безопасности "Domain01\User01", пользователя с разрешением на выполнение команд. Параметр ScriptBlock используется для задания команды, которая должна выполняться на удаленном компьютере.

Windows PowerShell отображает диалоговое окно, в котором необходимо указать пароль и метод проверки подлинности для учетной записи User01. Затем команда выполняется на компьютере Server01 и возвращает результаты.






Пример 3

C:\PS>$s = new-pssession -computername server02 -credential domain01\user01

C:\PS> invoke-command -session $s -scriptblock {get-culture}

Описание
-----------
В этом примере та же команда "Get-Culture" выполняется в сеансе (постоянное подключение) на удаленном компьютере Server02. Обычно сеанс создается только при выполнении на удаленном компьютере последовательности команд.

Первая команда использует командлет New-PSSession для создания сеанса на удаленном компьютере Server02. После этого она сохраняет сеанс в переменной $s.

Вторая команда выполняет команду Get-Culture на компьютере Server02 с помощью командлета Invoke-Command. Параметр Session используется для задания сеанса, сохраненного в переменной $s. 

Windows PowerShell выполняет команду в рамках сеанса на компьютере Server02.






Пример 4

C:\PS>invoke-command -computername Server02 -scriptblock {$p = get-process powershell}

C:\PS> invoke-command -computername Server02 -scriptblock {$p.virtualmemorysize}
C:\PS>

C:\PS> $s = new-pssession -computername Server02
C:\PS> invoke-command -session $s -scriptblock {$p = get-process powershell}
C:\PS> invoke-command -session $s -scriptblock {$p.virtualmemorysize}
17930240

Описание
-----------
В этом примере сравниваются результаты использования параметров командлета Invoke-Command ComputerName и Session. В нем показано использование сеанса для выполнения последовательности команд, работающих с общими данными.

Первые две команды используют параметр ComputerName командлета Invoke-Command для выполнения команд на удаленном компьютере Server02. Первая команда использует команду Get-Process для получения процесса PowerShell на удаленном компьютере и сохраняет его в переменной $p. Вторая команда получает значение свойства VirtualMemorySize процесса PowerShell. 

Первая команда выполняется успешно. Но вторая команда выполняется с ошибкой, поскольку при использовании параметра ComputerName Windows PowerShell создает подключение только для выполнения этой команды. После выполнения команды оболочка закрывает подключение. Переменная $p была создана в одном подключении, но она не существует в подключении, созданном для второй команды.

Проблема решается путем создания сеанса (постоянного подключения) на удаленном компьютере и запуска обеих связанных команд в рамках одного сеанса.

Третья команда использует командлет New-PSSession для создания сеанса на компьютере Server02. После этого она сохраняет сеанс в переменной $s. Четвертая и пятая команды повторяют последовательность команд, выполнявшуюся раньше, но в данном случае используется параметр Session команды Invoke-Command для выполнения обеих команд в рамках одного сеанса. 

В данном случае, поскольку обе команды выполняются в рамках одного сеанса, они выполняются успешно, и переменная $p остается активной в рамках сеанса $s для использования в дальнейшем.






Пример 5

C:\PS>$command = { get-eventlog -log "windows powershell" | where {$_.message -like "*certificate*"} }

C:\PS> invoke-command -computername S1, S2 -scriptblock $command

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

Если вся команда сохранена в локальной переменной, можно указать переменную в качестве значения параметра ScriptBlock. Для отправки значения локальной переменной не требуется использовать ключевое слово "param" или переменную ArgumentList.

Первая команда сохраняет команду Get-Eventlog в переменной $command. Формат команды соответствует формату блока скрипта.

Вторая команда использует командлет Invoke-Command для выполнения команды, содержащейся в переменной $command, на удаленных компьютерах S1 и S2.






Пример 6

C:\PS>invoke-command -computername server01, server02, TST-0143, localhost -configurationname MySession.PowerShell -scriptblock {get-eventlog "windows powershell"}

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

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

Команда используется параметр ConfigurationName для указания альтернативной конфигурации сеанса Windows PowerShell и параметр ScriptBlock для указания команды.

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






Пример 7

C:\PS>$version = invoke-command -computername (get-content machines.txt) -scriptblock {(get-host).version}

Описание
-----------
Эта команда получает версию основного приложения Windows PowerShell, запущенного на 200 удаленных компьютерах. 

Поскольку выполняется только одна команда, не требуется создавать постоянные подключения (сеансы) ко всем компьютерам. Вместо этого для указания компьютеров в команде используется параметр ComputerName.

Команда использует командлет Invoke-Command для выполнения команды Get-Host. Для получения значения свойства Version основного приложения Windows PowerShell используется обращение через точку.

Для указания компьютеров используется командлет Get-Content, который получает содержимое файла с именами компьютеров Machine.txt.

Эти команды выполняются синхронно (по одной за раз). После выполнения команд их выходные данные о всех компьютерах сохраняются в переменной $version. В выходных данных указано имя компьютера, от которого поступили данные.






Пример 8

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

C:\PS> invoke-command -session $s -scriptblock {get-eventlog system} -AsJob

Id   Name	State	HasMoreData   Location		 Command
---  ----	-----	-----		 -----------		--------			 -------
1	Job1	Running	True		Server01,Server02  get-eventlog system


C:\PS> $j = Get-Job

C:\PS> $j | format-list -property *

HasMoreData   : True
StatusMessage :
Location	: Server01,Server02
Command	 : get-eventlog system
JobStateInfo  : Running
Finished	: System.Threading.ManualResetEvent
InstanceId	: e124bb59-8cb2-498b-a0d2-2e07d4e030ca
Id			: 1
Name		: Job1
ChildJobs	 : {Job2, Job3}
Output		: {}
Error		 : {}
Progress	: {}
Verbose	 : {}
Debug		 : {}
Warning	 : {}
StateChanged  :

C:\PS> $results = $j | Receive-Job

Описание
-----------
Эти команды выполняют фоновое задание на двух удаленных компьютерах. Поскольку команда Invoke-Command использует параметр AsJob, команды выполняются на удаленных компьютерах, но задание фактически размещается на локальном компьютере, и результаты передаются на локальный компьютер.

Первая команда использует командлет New-PSSession для создания сеансов на удаленных компьютерах Server01 и Server02.

Вторая команда использует командлет Invoke-Command для выполнения фонового задания в рамках каждого сеанса. Параметр AsJob используется для выполнения команды в качестве фонового задания. Эта команда возвращает объект задания, содержащий два дочерних объекта задания (по объекту для каждого из заданий, выполняемых на двух удаленных компьютерах).

Третья команда использует команду Get-Job для сохранения объекта задания в переменной $j. 

Четвертая команда использует оператор конвейера (|) для отправки значения переменной $j командлету Format-List, который выводит все свойства объекта задания в виде списка.

Пятая команда получает результаты выполнения заданий. Она по конвейеру передает объект задания, сохраненный в переменной $j, командлету Receive-Job и сохраняет результаты в переменной $results.






Пример 9

C:\PS>$MWFO-LOg = Microsoft-Windows-Forwarding/Operational

C:\PS> invoke-command -computername server01 -scriptblock {param($log, $num) get-eventlog -logname $log -newest $num} -ArgumentList $MWFO-log, 10

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

Первая команда сохраняет имя журнала событий Microsoft-Windows-Forwarding/Operational в переменной $MWFO-Log.

Вторая команда использует командлет Invoke-Command для выполнения команды Get-EventLog на удаленном компьютере Server01. Эта команда получает 10 самых последних событий из журнала событий Microsoft-Windows-Forwarding/Operational на компьютере Server01.

В этой команде ключевое слово "param" используется для создания двух переменных, $log и $num, которые служат в качестве заполнителей для команды Get-EventLog. Произвольные имена этих заполнителей могут не соответствовать именам локальных переменных, используемых для установки значений заполнителей.

Значения параметра ArgumentList демонстрируют два различных способа указания значений в списке аргументов. Значение заполнителя $log — значение переменной $MFWO-Log, которое определяется в первой команде. Значение переменной $num равняется 10.

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






Пример 10

C:\PS>invoke-command -computername S1, S2 -scriptblock {get-process powershell} 

PSComputerName	Handles  NPM(K)	PM(K)	WS(K) VM(M)   CPU(s)	 Id   ProcessName
--------------	-------  ------	-----	----- -----   ------	 --   -----------
S1				575	15		45100	40988   200	 4.68	 1392 powershell
S2				777	14		35100	30988   150	 3.68	 67   powershell


C:\PS> invoke-command -computername S1, S2 -scriptblock {get-process powershell} -HideComputerName

Handles  NPM(K)	PM(K)	WS(K) VM(M)   CPU(s)	 Id   ProcessName
-------  ------	-----	----- -----   ------	 --   -----------
575	15		45100	40988   200	 4.68	 1392 powershell
777	14		35100	30988   150	 3.68	 67   powershell

Описание
-----------
В этом примере показан результат использования параметра HideComputerName командлета Invoke-Command. 

Первые две команды используют командлет Invoke-Command для выполнения команды Get-Process для процесса PowerShell. В выходные данные первой команды входит свойство PsComputerName, содержащее имя компьютера, на котором выполнялась команда. В выходные данные второй команды, в которой используется параметр HideComputerName, столбец PsComputerName не входит.

Использования параметра HideComputerName не приводит к изменению объекта. Можно по-прежнему использовать командлеты Format для отображения свойства PsComputerName любого соответствующего объекта.






Пример 11

C:\PS>invoke-command -comp (get-content servers.txt) -filepath c:\scripts\sample.ps1 -argumentlist Process, Service

Описание
-----------
В этом примере командлет Invoke-Command используется для выполнения скрипта Sample.ps1 на всех компьютерах, указанных в файле Servers.txt. Для указания файла скрипта в этой команде используется параметр FilePath. Эта команда позволяет выполнить скрипт на удаленных компьютерах, даже если файл скрипта недоступен на удаленных компьютерах.

При отправке этой команды содержимое файла Sample.ps1 копируется в блок скрипта, и блок скрипта выполняется на всех удаленных компьютерах. Эта команда эквивалентна использованию параметра ScriptBlock для отправки содержимого скрипта.






Пример 12

C:\PS>$LiveCred = Get-Credential

C:\PS> Invoke-Command -ConfigurationName Microsoft.Exchange `
		 -ConnectionUri https://ps.exchangelabs.com/powershell `
		 -Credential $LiveCred  -Authentication Basic `
		 -scriptblock {Invoke-Command {Set-Mailbox dan -DisplayName "Dan Park"}

Описание
-----------
В этом примере показано, как выполнять команду на удаленном компьютере, указанном с помощью URI (интернет-адреса). В этом конкретном примере на удаленном сервере Exchange Server выполняется команда Set-Mailbox. Открывающая кавычка (`) в команде Windows PowerShell является знаком продолжения строки.

Первая команда использует командлет Get-Credential для сохранения учетных данных Windows Live ID в переменной $LiveCred. Когда на экране появится диалоговое окно учетных данных, введите учетные данные Windows Live ID.

Вторая команда использует командлет Invoke-Command для выполнения команды Set-Mailbox. Параметр ConfigurationName используется командой для указания, что команда должна выполняться в рамках сеанса, конфигурация которого соответствует конфигурации сеанса Microsoft Exchange. Параметр ConnectionURI указывает URL-адрес конечной точки сервера Exchange Server. 

Параметр Credential указывает учетные данные Windows Live, сохраненные в переменной $LiveCred. Параметр AuthenticationMechanism указывает на использование обычной проверки подлинности. Параметр ScriptBlock задает блок скрипта, в котором содержится команда.






Пример 13

C:\PS>$max = New-PSSessionOption -MaximumRedirection 1

C:\PS> Invoke-Command -ConnectionUri https://ps.exchangelabs.com/powershell `
		 -scriptblock {Invoke-Command {Get-Mailbox dan} `
		 -AllowRedirection -SessionOption $max

Описание
-----------
Эта команда показывает, как использовать параметры AllowRedirection и SessionOption для управления перенаправлением URI в удаленную команду.

Первая команда использует командлет New-PSSessionOption для создания объекта PSSessionOpption, сохраняемого в переменной $max. Команда использует параметр MaximumRedirection для задания свойству MaximumConnectionRedirectionCount объекта PSSessionOption значения 1. 

Вторая команда использует командлет Invoke-Command для выполнения команды Get-Mailbox на удаленном сервере Microsoft Exchange Server. Команда использует параметр AllowRedirection, чтобы явно разрешить перенаправление соединения на альтернативную конечную точку. Она также использует параметр SessionOption для указания объекта сеанса, сохраненного в переменной $max.

В результате, если удаленный компьютер, указанный в параметре ConnectionURI, возвращает сообщение о перенаправлении, Windows PowerShell выполняет перенаправление соединения, но если новая конечная точка также возвращает сообщение о перенаправлении, то обнаруживается превышение счетчика перенаправлений (равного 1), и команда Invoke-Command возвращает непрерывающую ошибку.






Пример 14

C:\PS>$so = New-PSSessionOption -SkipCACheck

PS C:\> invoke-command $s { get-hotfix } -SessionOption $so -credential server01\user01

Описание
-----------
В этом примере демонстрируется создание и использование параметра SessionOption. 

Первая команда создает параметр сеанса с помощью командлета New-PSSessionOption. Результирующий объект SessionOption сохраняется в параметре $so.

Вторая команда выполняет команду Get-Hotfix на удаленном компьютере с помощью командлета Invoke-Command. Значением параметра SessionOption является объект SessionOption, сохраненный в переменной $so.






Пример 15

C:\PS>enable-wsmanCredSSP -delegate server02

C:\PS> connect-wsman Server02

C:\PS> set-item wsman:\server02*\service\auth\credSSP -value $true

C:\PS> $s = new-pssession server02

C:\PS> invoke-command -session $s -script {get-item \\Net03\Scripts\LogFiles.ps1} -authentication credssp -credential domain01\admin01

Описание
-----------
В этом примере показано, как получить доступ к общему сетевому ресурсу из удаленного сеанса. 

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

Первая команда использует командлет Enable-WSManCredSSP для включения делегирования CredSSP с локального компьютера Server01 на удаленном компьютере Server02. Это позволяет настроить параметр клиента CredSSP на локальном компьютере.

Вторая команда использует командлет Connect-WSman для подключения к компьютеру Server02. Это действие добавляет узел для компьютера Server02 на диск WSMan: на локальном компьютере, позволяя просматривать и изменять параметры WS-Management на компьютере Server02.

Третья команда использует командлет Set-Item для изменения значения элемента CredSSP в узле службы компьютера Server02 на значение "True". Это позволяет включить CredSSP в параметрах службы на удаленном компьютере.

Четвертая команда использует командлет New-PSSession для создания сеанса PSSession на компьютере Server02. Она сохраняет сеанс PSSession в переменной $s.

Пятая команда использует командлет Invoke-Command для выполнения команды Get-Item в сеансе в $s, которая возвращает скрипт из общего сетевого ресурса Net03\Scripts. Команда использует параметр Credential и параметр Authentication со значением CredSSP.






См. также