Каковы некоторые из лучших практик для написания сценариев, которые будут выполняться в удаленном контексте?
Например, я только что обнаружил, что встроенная переменная $Profile
не существует во время удаленного выполнения.
Каковы некоторые из лучших практик для написания сценариев, которые будут выполняться в удаленном контексте?
Например, я только что обнаружил, что встроенная переменная $Profile
не существует во время удаленного выполнения.
Вы обнаружили одно основное отличие: $profile
не настраивается.
В MSDN есть несколько часто задаваемых вопросов об удаленном powershell или выполните get-help about_Remote_FAQ
.
В разделе "ГДЕ МОИ ПРОФИЛИ?" (хех) это объясняет:
Например, следующая команда запускает профиль CurrentUserCurrentHost с локального компьютера в сеансе в $s.
invoke-command -session $s -filepath $profile
Следующая команда запускает профиль CurrentUserCurrentHost с удаленного компьютера в сеансе в $s. Поскольку переменная $profile не заполнена, команда использует явный путь к профилю.
invoke-command -session $s {. "$home\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1"}
Еще одно отличие, которое может повлиять на вас, заключается в том, что объекты .NET, возвращаемые командами, возвращаются не просто напрямую, а когда вы запускаете их удаленно и возвращаете, они сериализуются и десериализуются по сети. Многие объекты поддерживают этот штраф, но некоторые нет. Powershell автоматически удаляет методы для объектов, которые больше не «подключены», и тогда они в основном являются структурами данных... но он действительно перехватывает методы для некоторых типов, таких как DirectoryInfo
.
Обычно вам не нужно беспокоиться об этом, но если вы возвращаете сложные объекты по каналу, вы можете...
Блоки скрипта не действуют как замыкания, как обычно:
$var = 5
$sb={ $var }
&$sb # 5
Start-Job $sb | Wait-Job | Receive-Job # nothing