Заметки о Windows и других программных продуктах Microsoft...

Как передать переменную в удаленную сессию PowerShell

Как передать переменную в удаленную сессию PowerShell

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

Для примера создадим в текущем сеансе переменную $path, указывающую на директорию C:\Users, и затем выведем ее содержимое:

$path = ″C:\Users″
Get-ChildItem $path

создание локальной переменной

 

Теперь создадим удаленную сессию на сервере SRV2 и попробуем выполнить в ней ту же команду:

$session = New-PSSession -ComputerName SRV2
Invoke-Command -Session $session -ScriptBlock {Get-ChildItem $path}

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

Invoke-Command -Session $session -ScriptBlock {param($path) Get-ChildItem $path} -Arg $path

передача локальной переменной в удаленный сеанс с помощью param

 

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

Invoke-Command -Session $session -ScriptBlock {Get-ChildItem $Using:path}

передача локальной переменной в удаленный сеанс с помощью using

 

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

 
 
Комментарии

$var = gc $env:USERPROFILE\Desktop\file.txt # массив строк
icm $comp -cr $cred -sc {param($var); Out-File $env: -i $env:USERPROFILE\Desktop\file.txt $var} -arg $var

Запишет только одну строчку.

icm $comp -cr $cred -sc {param($var); Out-File -i $env:USERPROFILE\Desktop\file.txt $var} -arg $var

опечатка