编写将在远程上下文中执行的脚本有哪些最佳实践?
例如,我刚刚发现远程执行期间内置的var $Profile
不存在。
答案 0 :(得分:2)
您发现了一个主要区别,$profile
未配置。
Buried in MSDN here are some FAQs about remote 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
。
通常您不必担心这一点,但如果您通过管道返回复杂对象,则可能......
答案 1 :(得分:0)
脚本块不像通常那样充当闭包:
$var = 5
$sb={ $var }
&$sb # 5
Start-Job $sb | Wait-Job | Receive-Job # nothing