7

编写将在远程上下文中执行的脚本的最佳实践是什么?

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

4

2 回答 2

2

轮廓

您发现了一个主要区别,即$profile未配置。

埋在 MSDN 这里是一些关于远程 powershell 的常见问题解答,或者做get-help about_Remote_FAQ

在“我的个人资料在哪里?” (呵呵)它解释说:

例如,以下命令在 $s 中的会话中从本地计算机运行 CurrentUserCurrentHost 配置文件。

    invoke-command -session $s -filepath $profile

以下命令在 $s 中的会话中从远程计算机运行 CurrentUserCurrentHost 配置文件。由于未填充 $profile 变量,因此该命令使用配置文件的显式路径。

    invoke-command -session $s {. "$home\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1"}

序列化

另一个可能影响您的区别是,命令返回的 .NET 对象不是直接返回,而是当您远程运行它们并返回它们时,它们会通过网络进行序列化和反序列化。许多对象都支持这个罚款,但有些不支持。Powershell 会自动删除不再“挂钩”的对象上的方法,它们基本上是数据结构......但它确实会重新挂钩某些类型的方法,例如DirectoryInfo.

通常你不必担心这一点,但如果你通过管道返回复杂的对象,你可能......

于 2012-05-09T14:48:41.693 回答
0

脚本块不像通常那样充当闭包:

$var = 5
$sb={ $var }
&$sb # 5
Start-Job $sb | Wait-Job | Receive-Job # nothing
于 2010-04-20T21:54:38.500 回答