为本地和远程使用编写PowerShell脚本的最佳实践

时间:2010-04-19 15:09:17

标签: powershell powershell-remoting

编写将在远程上下文中执行的脚本有哪些最佳实践?

例如,我刚刚发现远程执行期间内置的var $Profile不存在。

2 个答案:

答案 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