【发布时间】:2011-02-09 17:50:45
【问题描述】:
编写将在远程上下文中执行的脚本的最佳实践是什么?
例如,我刚刚发现远程执行期间不存在内置 var $Profile。
【问题讨论】:
标签: powershell powershell-remoting
编写将在远程上下文中执行的脚本的最佳实践是什么?
例如,我刚刚发现远程执行期间不存在内置 var $Profile。
【问题讨论】:
标签: powershell powershell-remoting
您发现了一个主要区别,$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。
通常您不必担心这一点,但如果您通过管道返回复杂对象,您可能会...
【讨论】:
脚本块不像通常那样充当闭包:
$var = 5
$sb={ $var }
&$sb # 5
Start-Job $sb | Wait-Job | Receive-Job # nothing
【讨论】: