Лучшие практики для написания скриптов PowerShell для локального и удаленного использования - PullRequest
7 голосов
/ 19 апреля 2010

Каковы некоторые из лучших практик написания сценариев, которые будут выполняться в удаленном контексте?

Например, я только что обнаружил, что встроенная переменная $Profile не существует при удаленном выполнении.

Ответы [ 2 ]

2 голосов
/ 09 мая 2012

Профиль

Вы обнаружили одно основное отличие: $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.

Обычно вам не нужно об этом беспокоиться, но если вы возвращаете сложные объекты по каналу, вы можете ...

0 голосов
/ 21 апреля 2010

Блоки скриптов не действуют как замыкания, как обычно:

$var = 5
$sb={ $var }
&$sb # 5
Start-Job $sb | Wait-Job | Receive-Job # nothing
...