@Nordman99

Как передать переменную с локального компа на удаленный в сеанс powershell при выполнении psexec?

Всем доброго дня, есть необходимость выполнять на удаленных компах ряд команд в powershell,
Для этого придется использовать psexec (WinRM не получится)
Причем в команды надо передавать переменные из сеанса powershell на своем компе, т.е.:
Выполняю на своем компе в скрипт (т.е. свой сеанс Powershell):
Сначала идёт ряд команд
в итоге получаем переменную $X
psexec \\comp1 powershell -command "командлет -параметр $X"
Но удаленный сеанс есс-но ничего не знает о переменной $X, её надо как то сначала туда передать,
заключить $X в скобки, с целью чтобы переменная сначала развернулась в скрипте до выполнения psexec, так же не помогает
  • Вопрос задан
  • 86 просмотров
Решения вопроса 1
@MaxKozlov
тут скорее зависит от того что у вас там в параметрах
Что-то простое, типа строки, работает

$x = 'test'
psexec \\server powershell -NoProfile -Сommand "write-host '$X'"
psexec \\server powershell -NoProfile -Command "param(`$a) write-host `$a"  $x

А вот если там объект, его надо предварительно сериализовать в строку, а на той стороне десериализовать

Вариант сериализации - Convert-ToJson с последующим упаковыванием в base64

Может быть даже проще окажется использовать -EncodedCommand
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@1rV1N
попробуй сделать сначала строку с агрументами и потом её выполнять
[array]$arg = "\\comp1" , "powershell " , "-command" , "командлет -параметр" , "$X"
& psexec $arg
Ответ написан
Комментировать
@NortheR73
системный инженер
в итоге получаем переменную $X
- я передавал локальные переменные как $Using:X (например, внутри -ScriptBlock для Invoke-Command)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы