Invoke-Command

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

Синтаксис

Invoke-Command
      [-ScriptBlock] <ScriptBlock>
      [-NoNewScope]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-Session] <PSSession[]>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-Session] <PSSession[]>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-ComputerName] <String[]>]
      [-Credential <PSCredential>]
      [-Port <Int32>]
      [-UseSSL]
      [-ConfigurationName <String>]
      [-ApplicationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-InDisconnectedSession]
      [-SessionName <String[]>]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-CertificateThumbprint <String>]
      [<CommonParameters>]
Invoke-Command
      [[-ComputerName] <String[]>]
      [-Credential <PSCredential>]
      [-Port <Int32>]
      [-UseSSL]
      [-ConfigurationName <String>]
      [-ApplicationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-InDisconnectedSession]
      [-SessionName <String[]>]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [-Credential <PSCredential>]
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [[-ConnectionUri] <Uri[]>]
      [-AsJob]
      [-InDisconnectedSession]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-AllowRedirection]
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-CertificateThumbprint <String>]
      [<CommonParameters>]
Invoke-Command
      [-Credential <PSCredential>]
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [[-ConnectionUri] <Uri[]>]
      [-AsJob]
      [-InDisconnectedSession]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-AllowRedirection]
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-ScriptBlock] <ScriptBlock>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-VMId] <Guid[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-ScriptBlock] <ScriptBlock>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -VMName <String[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-FilePath] <String>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-VMId] <Guid[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-FilePath] <String>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -VMName <String[]>
      [<CommonParameters>]
Invoke-Command
      [-Port <Int32>]
      [-AsJob]
      [-HideComputerName]
      -ScriptBlock <ScriptBlock>
      -HostName <String[]>
      [-UserName <String>]
      [-KeyFilePath <String>]
      [-SSHTransport]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-Subsystem <String>]
      [<CommonParameters>]
Invoke-Command
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-RunAsAdministrator]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -ContainerId <String[]>
      [<CommonParameters>]
Invoke-Command
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-RunAsAdministrator]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -ContainerId <String[]>
      [<CommonParameters>]
Invoke-Command
      [-AsJob]
      [-HideComputerName]
      -ScriptBlock <ScriptBlock>
      -SSHConnection <Hashtable[]>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [-AsJob]
      [-HideComputerName]
      -FilePath <String>
      -HostName <String[]>
      [-UserName <String>]
      [-KeyFilePath <String>]
      [-SSHTransport]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [-AsJob]
      [-HideComputerName]
      -FilePath <String>
      -SSHConnection <Hashtable[]>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]

Описание

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

Чтобы выполнить одну команду на удаленном компьютере, используйте параметр ComputerName. Чтобы выполнить ряд связанных команд, совместно использующих данные, используйте New-PSSession командлет для создания PSSession (постоянного подключения) на удаленном компьютере, а затем используйте параметр Invoke-CommandSession для выполнения команды в PSSession. Чтобы выполнить команду в отключенном сеансе, используйте параметр InDisconnectedSession. Чтобы выполнить команду в фоновом задании, используйте параметр AsJob.

Вы также можете использовать Invoke-Command на локальном компьютере блок скрипта в качестве команды. PowerShell запускает блок скрипта немедленно в дочерней области текущей области.

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

Начиная с PowerShell 6.0, можно использовать Secure Shell (SSH) для установления подключения к удаленным компьютерам и вызова команд. SSH необходимо установить на локальном компьютере, а удаленный компьютер должен быть настроен с помощью конечной точки SSH PowerShell. Преимущество удаленного сеанса PowerShell на основе SSH заключается в том, что он работает на нескольких платформах (Windows, Linux, macOS). Для сеанса на основе SSH используются параметры HostName или SSHConnection , чтобы указать удаленный компьютер и соответствующие сведения о подключении. Дополнительные сведения о настройке удаленного взаимодействия PowerShell SSH см. в статье о удаленном взаимодействии PowerShell по протоколу SSH.

Некоторые примеры кода используют сплаттинг для уменьшения длины строки. Дополнительные сведения см. в about_Splatting.

Примеры

Пример 1. Запуск скрипта на сервере

В этом примере скрипт выполняется Test.ps1 на компьютере Server01.

Invoke-Command -FilePath c:\scripts\test.ps1 -ComputerName Server01

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

Пример 2. Выполнение команды на удаленном сервере

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

Invoke-Command -ComputerName Server01 -Credential Domain01\User01 -ScriptBlock { Get-Culture }

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

В ответ PowerShell запрашивает пароль и метод проверки подлинности для учетной записи User01. Затем на компьютере Server01 запускается команда и возвращается результат.

Пример 3. Выполнение команды в постоянном подключении

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

$s = New-PSSession -ComputerName Server02 -Credential Domain01\User01
Invoke-Command -Session $s -ScriptBlock {Get-Culture}

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

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

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

Пример 4. Использование сеанса для выполнения ряда команд, совместно использующих данные

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

Invoke-Command -ComputerName Server02 -ScriptBlock {$p = Get-Process PowerShell}
Invoke-Command -ComputerName Server02 -ScriptBlock {$p.VirtualMemorySize}
$s = New-PSSession -ComputerName Server02
Invoke-Command -Session $s -ScriptBlock {$p = Get-Process PowerShell}
Invoke-Command -Session $s -ScriptBlock {$p.VirtualMemorySize}

17930240

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

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

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

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

Пример 5. Введите команду, хранящуюся в локальной переменной

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

$command = { Get-WinEvent -LogName PowerShellCore/Operational |
  Where-Object {$_.Message -like "*certificate*"} }
Invoke-Command -ComputerName S1, S2 -ScriptBlock $command

Переменная $command сохраняет Get-WinEvent команду, отформатированную как блок скрипта. Выполняет Invoke-Command команду, хранящуюся $command на удаленных компьютерах S1 и S2.

Пример 6. Выполнение одной команды на нескольких компьютерах

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

$parameters = @{
  ComputerName = "Server01", "Server02", "TST-0143", "localhost"
  ConfigurationName = 'MySession.PowerShell'
  ScriptBlock = { Get-WinEvent -LogName PowerShellCore/Operational }
}
Invoke-Command @parameters

Параметр ComputerName указывает разделенный запятыми список имен компьютеров. Список компьютеров включает значение localhost, представляющее локальный компьютер. Параметр ConfigurationName указывает альтернативную конфигурацию сеанса. Параметр ScriptBlock запускается Get-WinEvent для получения журналов событий PowerShellCore или Operational с каждого компьютера.

Пример 7. Получение версии хост-программы на нескольких компьютерах

В этом примере возвращается версия хост-программы PowerShell, работающей на 200 удаленных компьютерах.

$version = Invoke-Command -ComputerName (Get-Content Machines.txt) -ScriptBlock {(Get-Host).Version}

Так как выполняется только одна команда, вам не нужно создавать постоянные подключения к каждому из компьютеров. Вместо этого команда использует параметр ComputerName для указания компьютеров. Чтобы указать компьютеры, он использует Get-Content командлет для получения содержимого файла Machine.txt , файла имен компьютеров.

Командлет Invoke-Command выполняет Get-Host команду на удаленных компьютерах. Для получения свойства Version узла PowerShell используется точечная нотация.

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

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

В этом примере выполняется команда на двух удаленных компьютерах. Команда Invoke-Command использует параметр AsJob , чтобы команда выполнялись в качестве фонового задания. Команды выполняются на удаленных компьютерах, но задание существует на локальном компьютере. Результаты передаются на локальный компьютер.

$s = New-PSSession -ComputerName Server01, Server02
Invoke-Command -Session $s -ScriptBlock {Get-EventLog system} -AsJob

Id   Name    State      HasMoreData   Location           Command
---  ----    -----      -----         -----------        ---------------
1    Job1    Running    True          Server01,Server02  Get-EventLog system

$j = Get-Job
$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  :

$results = $j | Receive-Job

Командлет New-PSSession создает сеансы на удаленных компьютерах Server01 и Server02. Командлет Invoke-Command выполняет фоновое задание в каждом сеансе. Команда с помощью параметра AsJob выполняет команду как фоновое задание. Эта команда возвращает объект задания, который содержит два дочерних объекта задания: один для каждого из заданий, запущенных на двух удаленных компьютерах.

Команда Get-Job сохраняет объект задания в переменной $j . Затем $j переменная будет передана командлету Format-List для отображения всех свойств объекта задания в списке. Последняя команда получает результаты заданий. Он передает объект задания в $jReceive-Job командлет и сохраняет результаты в переменной $results .

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

В этом примере показано, как включить значения локальных переменных в команду, запущенную на удаленном компьютере. Команда использует модификатор Using области для идентификации локальной переменной в удаленной команде. По умолчанию предполагается, что все переменные определяются в удаленном сеансе. Модификатор Using области появился в PowerShell 3.0. Дополнительные сведения об модификаторе Using области см. в about_Remote_Variables и about_Scopes.

$Log = "PowerShellCore/Operational"
Invoke-Command -ComputerName Server01 -ScriptBlock {Get-WinEvent -LogName $Using:Log -MaxEvents 10}

Переменная $Log сохраняет имя журнала событий, PowerShellCore или Operational. Командлет Invoke-Command выполняется Get-WinEvent на сервере Server01, чтобы получить десять новейших событий из журнала событий. Значение параметра LogName — это $Log переменная, префиксная модификатором Using области, указывающая, что она была создана в локальном сеансе, а не в удаленном сеансе.

Пример 10. Скрытие имени компьютера

В этом примере показан эффект использования параметра HideComputerName объекта Invoke-Command. HideComputerName не изменяет объект, возвращаемый этим командлетом. Он изменяет только дисплей. Командлеты Format по-прежнему можно использовать для отображения свойства PsComputerName любого из затронутых объектов.

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

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

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

Пример 11. Использование ключевого слова Param в блоке скрипта

Ключевое Param слово и параметр ArgumentList используются для передачи значений переменных именованным параметрам в блоке скрипта. В этом примере отображаются имена файлов, которые начинаются с буквы a и имеют .pdf расширение.

Дополнительные сведения о ключевом слове Param см. в about_Language_Keywords.

$parameters = @{
    ComputerName = "Server01"
    ScriptBlock = { Param ($param1,$param2) Get-ChildItem -Name $param1 -Include $param2 }
    ArgumentList = "a*", "*.pdf"
}
Invoke-Command @parameters

aa.pdf
ab.pdf
ac.pdf
az.pdf

Invoke-Command использует параметр ScriptBlock , определяющий две переменные и $param1$param2. Get-ChildItem использует именованные параметры, имя и включить с именами переменных. ArgumentList передает значения переменным.

Пример 12. Использование автоматической переменной $args в блоке скрипта

Автоматическая $args переменная и параметр ArgumentList используются для передачи значений массива в позиции параметров в блоке скрипта. В этом примере отображается содержимое .txt каталога сервера файлов. Параметр Get-ChildItemPath имеет позицию 0, а параметр Filter имеет позицию 1.

Дополнительные сведения о переменной $args см. в разделе about_Automatic_Variables

$parameters = @{
    ComputerName = "Server01"
    ScriptBlock = { Get-ChildItem $args[0] $args[1] }
    ArgumentList = "C:\Test", "*.txt*"
}
Invoke-Command @parameters

Directory: C:\Test

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           6/12/2019    15:15            128 alog.txt
-a---           7/27/2019    15:16            256 blog.txt
-a---           9/28/2019    17:10             64 zlog.txt

Invoke-Commandиспользует параметр ScriptBlock и Get-ChildItem задает значения массива$args[0].$args[1] ArgumentList передает значения Get-ChildItem массива $args в позиции параметров для Path и Filter.

Пример 13. Запуск скрипта на всех компьютерах, перечисленных в текстовом файле

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

Invoke-Command -ComputerName (Get-Content Servers.txt) -FilePath C:\Scripts\Sample.ps1 -ArgumentList Process, Service

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

Пример 14. Выполнение команды на удаленном компьютере с помощью URI

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

$LiveCred = Get-Credential
$parameters = @{
  ConfigurationName = 'Microsoft.Exchange'
  ConnectionUri = 'https://ps.exchangelabs.com/PowerShell'
  Credential = $LiveCred
  Authentication = 'Basic'
  ScriptBlock = {Set-Mailbox Dan -DisplayName "Dan Park"}
}
Invoke-Command @parameters

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

Переменная $parameters представляет собой хэш-таблицу, содержащую параметры, передаваемые командлету Invoke-Command . Командлет Invoke-Command выполняет Set-Mailbox команду с помощью конфигурации сеанса Microsoft.Exchange . Параметр ConnectionURI указывает URL-адрес конечной точки сервера Exchange Server. Параметр Credential указывает учетные данные, хранящиеся в переменной $LiveCred . Параметр AuthenticationMechanism указывает способ использования обычной проверки подлинности. Параметр ScriptBlock указывает блок скрипта, который содержит команду.

Пример 15. Использование параметра сеанса

В этом примере показано, как создать и использовать параметр SessionOption .

$so = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck
Invoke-Command -ComputerName server01 -UseSSL -ScriptBlock { Get-HotFix } -SessionOption $so -Credential server01\user01

Командлет New-PSSessionOption создает объект параметра сеанса, который приводит к тому, что удаленный конец не проверяет центр сертификации, каноническое имя и списки отзыва при оценке входящего HTTPS-подключения. Объект SessionOption сохраняется в переменной $so .

Примечание

Отключение этих проверок удобно для устранения неполадок, но, очевидно, небезопасно.

Командлет Invoke-Command выполняет Get-HotFix команду удаленно. Параметр SessionOption получает $so переменную.

Пример 16. Управление перенаправлением URI в удаленной команде

В этом примере показано, как использовать параметры AllowRedirection и SessionOption для управления перенаправлением URI в удаленной команде.

$max = New-PSSessionOption -MaximumRedirection 1
$parameters = @{
  ConnectionUri = "https://ps.exchangelabs.com/PowerShell"
  ScriptBlock = { Get-Mailbox dan }
  AllowRedirection = $true
  SessionOption = $max
}
Invoke-Command @parameters

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

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

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

Пример 17. Доступ к сетевой папке в удаленном сеансе

В этом примере показано, как получить доступ к сетевой папке из удаленного сеанса. Для демонстрации примера используются три компьютера. Server01 — это локальный компьютер, Server02 — удаленный компьютер, а Net03 — сетевой ресурс. Server01 подключается к Server02, а затем Server02 выполняет второй прыжок к Net03 для доступа к сетевой папке. Дополнительные сведения о том, как удаленное взаимодействие PowerShell поддерживает прыжки между компьютерами, см. в разделе "Создание второго прыжка в удаленном взаимодействии PowerShell".

Необходимое делегирование поставщика поддержки безопасности учетных данных (CredSSP) включено в параметрах клиента на локальном компьютере и в параметрах службы на удаленном компьютере. Чтобы выполнить команды в этом примере, необходимо быть членом группы администраторов на локальном компьютере и удаленном компьютере.

Enable-WSManCredSSP -Role Client -DelegateComputer Server02
$s = New-PSSession Server02
Invoke-Command -Session $s -ScriptBlock {Enable-WSManCredSSP -Role Server -Force}
$parameters = @{
  Session = $s
  ScriptBlock = { Get-Item \\Net03\Scripts\LogFiles.ps1 }
  Authentication = "CredSSP"
  Credential = "Domain01\Admin01"
}
Invoke-Command @parameters

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

New-PSSession создает объект PSSession для Server02 и сохраняет объект в переменной $s .

Командлет Invoke-Command использует $s переменную для подключения к удаленному компьютеру Server02. Параметр ScriptBlock выполняется Enable-WSManCredSSP на удаленном компьютере. Параметр Role указывает сервер для настройки параметра сервера CredSSP на удаленном компьютере.

Переменная $parameters содержит значения параметров для подключения к сетевой папке. Командлет Invoke-Command выполняет Get-Item команду в сеансе.$s Эта команда получает скрипт из сетевого \\Net03\Scripts ресурса. Команда использует параметр authentication со значением CredSSP и параметром Credential со значением Domain01\Admin01.

Пример 18. Запуск сценариев на многих удаленных компьютерах

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

$parameters = @{
  ComputerName = (Get-Content -Path C:\Test\Servers.txt)
  InDisconnectedSession = $true
  FilePath = "\\Scripts\Public\ConfigInventory.ps1"
  SessionOption = @{OutputBufferingMode="Drop";IdleTimeout=43200000}
}
Invoke-Command @parameters

Команда используется Invoke-Command для запуска скрипта. Значение параметра ComputerName — это Get-Content команда, которая получает имена удаленных компьютеров из текстового файла. Параметр InDisconnectedSession отключает сеансы сразу при запуске команды. Значение параметра FilePath — это скрипт, который Invoke-Command выполняется на каждом компьютере.

Значение SessionOption представляет собой хэш-таблицу. Значение OutputBufferingMode имеет значение Drop , а для значения IdleTimeout задано значение 43200000 миллисекунд (12 часов).

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

Пример 19. Выполнение команды на удаленном компьютере с помощью SSH

В этом примере показано, как выполнить команду на удаленном компьютере с помощью Secure Shell (SSH). Если на удаленном компьютере настроен протокол SSH для запроса паролей, появится запрос на ввод паролей. В противном случае потребуется использовать проверку подлинности пользователя на основе ключа SSH.

Invoke-Command -HostName UserA@LinuxServer01 -ScriptBlock { Get-MailBox * }

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

В этом примере показано, как выполнить команду на удаленном компьютере с помощью SSH и указать файл ключа для проверки подлинности пользователя. Вам не будет предложено ввести пароль, если проверка подлинности ключа не завершается сбоем, и удаленный компьютер настроен так, чтобы разрешить обычную проверку подлинности паролей.

Invoke-Command -HostName UserA@LinuxServer01 -ScriptBlock { Get-MailBox * } -KeyFilePath /UserA/UserAKey_rsa

Пример 21. Запуск файла сценария на нескольких удаленных компьютерах с помощью SSH в качестве задания

В этом примере показано, как запустить файл скрипта на нескольких удаленных компьютерах с помощью SSH и набора параметров SSHConnection . Параметр SSHConnection принимает массив хэш-таблиц, содержащих сведения о подключении для каждого компьютера. В этом примере требуется, чтобы на целевых удаленных компьютерах настроен протокол SSH для поддержки проверки подлинности пользователей на основе ключей.

$sshConnections =
@{ HostName="WinServer1"; UserName="Domain\UserA"; KeyFilePath="C:\Users\UserA\id_rsa" },
@{ HostName="UserB@LinuxServer5"; KeyFilePath="/Users/UserB/id_rsa" }
$results = Invoke-Command -FilePath c:\Scripts\CollectEvents.ps1 -SSHConnection $sshConnections

Параметры

-AllowRedirection

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

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

Можно также ограничить количество перенаправлений соединение, изменив значение параметра сеанса MaximumConnectionRedirectionCount. Используйте параметр MaximumRedirection командлета New-PSSessionOption или задайте свойство MaximumConnectionRedirectionCount переменной $PSSessionOption предпочтения. Значение по умолчанию — 5.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ApplicationName

Определяет сегмент имени приложения в URI соединения. Используйте этот параметр, чтобы указать имя приложения, если параметр ConnectionURI не используется в команде.

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

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

Type:String
Position:Named
Default value:$PSSessionApplicationName if set on the local computer, otherwise WSMAN
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-ArgumentList

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

Значения в параметре ArgumentList могут быть фактическими значениями, такими как 1024, или ссылаться на локальные переменные, например $max.

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

{param($<name1>[, $<name2>]...) <command-with-local-variables>} -ArgumentList <value> -или- <local-variable>

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

Type:Object[]
Aliases:Args
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-AsJob

Указывает, что этот командлет выполняет команду в качестве фонового задания на удаленном компьютере. Используйте этот параметр для выполнения команд, которые занимают много времени для завершения.

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

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

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

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Authentication

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

Допустимые значения для этого параметра:

  • Значение по умолчанию
  • Basic
  • Credssp
  • Digest (дайджест)
  • Kerberos
  • Согласование
  • NegotiateWithImplicitCredential

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

Дополнительные сведения о значениях этого параметра см. в описании перечисления AuthenticationMechanism.

Внимание!

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

Type:AuthenticationMechanism
Accepted values:Basic, Default, Credssp, Digest, Kerberos, Negotiate, NegotiateWithImplicitCredential
Position:Named
Default value:Default
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CertificateThumbprint

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

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

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

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ComputerName

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

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

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

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

В Windows Vista и более поздних версиях операционной системы Windows для включения локального компьютера в значение ComputerName необходимо запустить PowerShell с помощью параметра " Запуск от имени администратора ".

Type:String[]
Aliases:Cn
Position:0
Default value:Local computer
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ConfigurationName

Указывает конфигурацию сеанса, которая используется для новой PSSession.

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

При использовании с SSH этот параметр указывает подсистему, используемую в целевом объекте, как определено в .sshd_config Значением по умолчанию для SSH является подсистема powershell .

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

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

Type:String
Position:Named
Default value:$PSSessionConfigurationName if set on the local computer, otherwise Microsoft.PowerShell
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-ConnectionUri

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

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

<Transport>://<ComputerName>:<Port>/<ApplicationName>

Значение по умолчанию определяется следующим образом.

https://localhost:5985/WSMAN

Если не указать универсальный код ресурса (URI) подключения, можно использовать параметры UseSSL и Port для указания значений URI подключения.

Допустимые значения для сегмента Transport идентификатора URI: HTTP и HTTPS. Если указать URI подключения с сегментом транспорта, но не указать порт, сеанс создается с помощью портов стандартов: 80 для HTTP и 443 для HTTPS. Чтобы использовать порты по умолчанию для удаленного взаимодействия PowerShell, укажите порт 5985 для HTTP или 5986 для HTTPS.

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

Type:Uri[]
Aliases:URI, CU
Position:0
Default value:https://localhost:5985/WSMAN
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ContainerId

Указывает массив идентификаторов контейнеров.

Type:String[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Credential

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

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

Учетные данные хранятся в объекте PSCredential , а пароль хранится как SecureString.

Примечание

Дополнительные сведения о защите данных SecureString см. в разделе "Защита SecureString"?.

Type:PSCredential
Position:Named
Default value:Current user
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-EnableNetworkAccess

Указывает, что этот командлет добавляет интерактивный маркер безопасности в сеансы замыкания на себя. Интерактивный маркер позволяет выполнять в петлевом сеансе команды, которые получают данные с других компьютеров. Например, можно выполнить команду в сеансе, который копирует XML-файлы с удаленного компьютера на локальный.

Сеанс замыкания на себя — это сеанс PSSession , который создается и заканчивается на том же компьютере. Чтобы создать сеанс замыкания на себя, опустите параметр ComputerName или задайте для параметра dot (.), localhost или имя локального компьютера.

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

Параметр EnableNetworkAccess действует только в петлевых сеансах. Если при создании сеанса на удаленном компьютере используется EnableNetworkAccess , команда завершается успешно, но параметр игнорируется.

Вы можете разрешить удаленный доступ в сеансе замыкания на себя с помощью значения CredSSP параметра authentication, который делегирует учетные данные сеанса другим компьютерам.

Чтобы защитить компьютер от вредоносного доступа, отключенные сеансы замыкания на себя, имеющие интерактивные токены, созданные с помощью EnableNetworkAccess, можно повторно подключиться только с компьютера, на котором был создан сеанс. Отключенные сеансы, использующие проверку подлинности CredSSP, можно повторно подключить с других компьютеров. Для получения дополнительной информации см. Disconnect-PSSession.

Этот параметр появился в PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FilePath

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

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

Type:String
Aliases:PSPath
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-HideComputerName

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

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

Type:SwitchParameter
Aliases:HCN
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-HostName

Задает массив имен компьютеров для подключения на основе Secure Shell (SSH). Это похоже на параметр ComputerName , за исключением того, что подключение к удаленному компьютеру выполняется с помощью SSH, а не Windows WinRM.

Этот параметр появился в PowerShell 6.0.

Type:String[]
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-InDisconnectedSession

Указывает, что этот командлет выполняет команду или скрипт в отключенном сеансе.

При использовании параметра Invoke-CommandInDisconnectedSession создается постоянный сеанс на каждом удаленном компьютере, запускается команда, заданная параметром ScriptBlock или FilePath, а затем отключается от сеанса. Команды продолжают выполняться в отключенных сеансах. InDisconnectedSession позволяет выполнять команды без поддержки подключения к удаленным сеансам. Так как сеанс отключается перед возвратом результатов, InDisconnectedSession гарантирует, что все результаты команд возвращаются в сеанс повторного подключения, а не разделены между сеансами.

InDisconnectedSession нельзя использовать с параметром Session или параметром AsJob.

Команды, использующие InDisconnectedSession , возвращают объект PSSession , представляющий отключенный сеанс. Они не возвращают выходные данные команды. Чтобы подключиться к отключенным сеансам, используйте Connect-PSSession командлеты или Receive-PSSession командлеты. Чтобы получить результаты команд, которые выполнялись в сеансе, используйте Receive-PSSession командлет. Чтобы выполнить команды, которые создают выходные данные в отключенном сеансе, задайте для параметра сеанса OutputBufferingMode значение Drop. Если вы планируете подключиться к отключенным сеансам, установите время ожидания простоя в сеансе, чтобы обеспечить достаточно времени для подключения перед удалением сеанса.

Вы можете задать режим буферизации выходных данных и время ожидания простоя в параметре SessionOption или в переменной $PSSessionOption предпочтения. Дополнительные сведения о параметрах сеанса см. в разделе New-PSSessionOption и about_Preference_Variables.

Дополнительные сведения о функции отключенных сеансов см. в разделе about_Remote_Disconnected_Sessions.

Этот параметр появился в PowerShell 3.0.

Type:SwitchParameter
Aliases:Disconnected
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

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

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

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-JobName

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

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

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

Type:String
Position:Named
Default value:Job<n>
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-KeyFilePath

Указывает путь к файлу ключа, используемый Secure Shell (SSH) для проверки подлинности пользователя на удаленном компьютере.

SSH позволяет выполнять проверку подлинности пользователей с помощью закрытых и открытых ключей в качестве альтернативы базовой проверке подлинности паролей. Если удаленный компьютер настроен для проверки подлинности ключа, этот параметр можно использовать для предоставления ключа, идентифицирующее пользователя.

Этот параметр появился в PowerShell 6.0.

Type:String
Aliases:IdentityFilePath
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-NoNewScope

Указывает, что этот командлет выполняет указанную команду в текущей области. По умолчанию Invoke-Command команды выполняются в собственной области.

Этот параметр допустим только в командах, которые выполняются в текущем сеансе, т. е. в командах, которые пропускают как параметр ComputerName, так и параметр Session.

Этот параметр появился в PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Port

Указывает сетевой порт на удаленном компьютере, используемом для этой команды. Для подключения к удаленному компьютеру требуется, чтобы он прослушивал порт, используемый соединением. По умолчанию используются порты 5985 (порт WinRM для HTTP) и 5986 (порт WinRM для HTTPS).

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

Remove-Item -Path WSMan:\Localhost\listener\listener* -Recurse

New-Item -Path WSMan:\Localhost\listener -Transport http -Address * -Port \<port-number\>

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

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-RemoteDebug

Используется для запуска вызываемой команды в режиме отладки в удаленном сеансе PowerShell.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-RunAsAdministrator

Указывает, что этот командлет вызывает команду от имени администратора.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ScriptBlock

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

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

Type:ScriptBlock
Aliases:Command
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Session

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

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

Type:PSSession[]
Position:0
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SessionName

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

Этот параметр появился в PowerShell 3.0.

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SessionOption

Задает дополнительные параметры для сеанса. Введите объект SessionOption , например объект, создаваемый с помощью командлета New-PSSessionOption , или хэш-таблицу, в которой ключи являются именами параметров сеанса, а значения — значениями параметров сеанса.

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

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

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

Type:PSSessionOption
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SSHConnection

Этот параметр принимает массив хэш-таблиц, в которых каждая хэш-таблица содержит один или несколько параметров подключения, необходимых для установления подключения Secure Shell (SSH). Параметр SSHConnection полезен для создания нескольких сеансов, где для каждого сеанса требуются разные сведения о подключении.

Хэш-хэш-файл содержит следующие элементы:

  • ComputerName (или HostName)
  • порт.
  • UserName
  • KeyFilePath (или IdentityFilePath)

ComputerName (или HostName) — это единственная обязательная пара "ключ-значение".

Этот параметр появился в PowerShell 6.0.

Type:Hashtable[]
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-SSHTransport

Указывает, что удаленное подключение установлено с помощью Secure Shell (SSH).

По умолчанию PowerShell использует Windows WinRM для подключения к удаленному компьютеру. Этот параметр заставляет PowerShell использовать параметр HostName для установки удаленного подключения на основе SSH.

Этот параметр появился в PowerShell 6.0.

Type:SwitchParameter
Accepted values:true
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Subsystem

Указывает подсистему SSH, используемую для нового сеанса PSSession.

Это указывает подсистему, используемую в целевом объекте, как определено в sshd_config. Подсистема запускает определенную версию PowerShell с предопределенными параметрами. Если указанная подсистема не существует на удаленном компьютере, команда завершается ошибкой.

Если этот параметр не используется, по умолчанию используется подсистема PowerShell.

Type:String
Position:Named
Default value:powershell
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-ThrottleLimit

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

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

Type:Int32
Position:Named
Default value:32
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UserName

Указывает имя пользователя для учетной записи, используемой для выполнения команды на удаленном компьютере. Метод проверки подлинности пользователя зависит от настройки Secure Shell (SSH) на удаленном компьютере.

Если SSH настроен для обычной проверки подлинности паролей, вам будет предложено ввести пароль пользователя.

Если протокол SSH настроен для проверки подлинности пользователя на основе ключей, путь к файлу ключа можно указать с помощью параметра KeyFilePath и не будет запрашиваться пароль. Если файл ключа пользователя клиента находится в известном расположении SSH, параметр KeyFilePath не требуется для проверки подлинности на основе ключей, а проверка подлинности пользователя выполняется автоматически на основе имени пользователя. Дополнительные сведения см. в документации по SSH вашей платформы о проверке подлинности пользователей на основе ключей.

Это не обязательный параметр. Если параметр UserName не указан, для подключения используется текущее имя пользователя, вошедшего в систему.

Этот параметр появился в PowerShell 6.0.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UseSSL

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

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

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

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-VMId

Задает массив идентификаторов виртуальных машин.

Type:Guid[]
Aliases:VMGuid
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-VMName

Указывает массив имен виртуальных машин.

Type:String[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

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

ScriptBlock

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

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

System.Management.Automation.PSRemotingJob, System.Management.Automation.Runspaces.PSSession, or the output of the invoked command

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

Примечания

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

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

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

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

Set-Item -Path WSMan:\Localhost\Client\TrustedHosts -Value \<Remote-Computer-Name\>

При отключении PSSession с помощью параметра InDisconnectedSession состояние сеанса отключено , а доступность — None. Значение свойства State определяется текущим сеансом. Значение "Отключено " означает, что PSSession не подключен к текущему сеансу. Однако это не означает, что PSSession отключается от всех сеансов. Он может быть подключен к другому сеансу. Определить возможность подключения или повторного подключения к сеансу позволяет свойство Availability.

Если свойство Availability имеет значение None, подключиться к сеансу можно. Значение "Занято " указывает, что подключение к PSSession невозможно, так как оно подключено к другому сеансу. Дополнительные сведения о значениях свойства State сеансов см. в разделе RunspaceState. Дополнительные сведения о значениях свойства availability сеансов см. в разделе RunspaceAvailability.

Параметры HostName и SSHConnection были включены начиная с PowerShell 6.0. Они были добавлены для предоставления удаленного взаимодействия PowerShell на основе Secure Shell (SSH). PowerShell и SSH поддерживаются на нескольких платформах (Windows, Linux, macOS) и удаленном взаимодействии PowerShell на этих платформах, где установлены и настроены PowerShell и SSH. Это отдельно от предыдущего удаленного взаимодействия Windows, основанного на WinRM, и многие специальные функции и ограничения WinRM не применяются. Например, квоты на основе WinRM, параметры сеанса, настраиваемая конфигурация конечной точки и функции отключения и повторного подключения в настоящее время не поддерживаются. Дополнительные сведения о настройке удаленного взаимодействия PowerShell SSH см. в статье о удаленном взаимодействии PowerShell по протоколу SSH.