Як передати змінну в віддалену сесію 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
Як варіант, для віддалених команд можна використовувати область видимості змінної Using, вказавши що змінна визначена в локальному сеансі.У нашому випадку команда буде виглядати так:
Invoke-Command -Session $ session -ScriptBlock {Get-ChildItem $ Using: path}
Примітка. Перший спосіб підходить для будь-якої версії PowerShell, другий можна використовувати тільки в PowerShell 3.0 і вище.
.