如何将变量从一个PowerShell脚本加载到另一个?

时间:2010-06-28 22:37:31

标签: powershell

我有一个主脚本调用其他几个脚本,我需要将其他脚本中的变量加载到主脚本中,以便我可以将它们转储到html文件中。我尝试点源我正在调用的脚本,但是没有用,或者我做错了。任何帮助,将不胜感激。

脚本的示例部分:

.\get-cluster.ps1

$MyReport += Get-CustomHeader "Clusters not in compliance : $($CapacityInfo.count) ($MyReport += Get-HTMLTable $capacityinfo
$MyReport += Get-CustomHeaderClose

变量$capacityinfo存在于get-cluster.ps1脚本

2 个答案:

答案 0 :(得分:5)

除非您的get-cluster.ps1文件位于根目录中,否则点源将看起来更像这样:

. .\Get-Cluster.ps1

这将在与调用者相同的范围内执行Get-Cluster.ps1脚本,使其调用者的脚本级变量可用。

答案 1 :(得分:3)

Dot sourcing将实现您的目标。但是,这是一个模糊的设计,与PowerShell CmdLet开发指南冲突。当然,您正在编写脚本而不是Cmdlet,但是考虑到您选择的脚本文件名,您似乎正在尝试遵循PowerShell约定。

使用动词Get表示您正在检索资源。因此,如果您有一个名为Get-Cluster.ps1的脚本,那么它应该检索一个或多个Cluster个实例。请考虑以下内容:

$clusters = .\Get-Cluster.ps1 -NonCompliantOnly

这仍然可以让您在当前范围内设置一个变量,而不会出现点源的神奇和含糊之处。我并不是在试图说教,但是PowerShell团队在创建一致性方面做得很好,我认为当我们使用自己的脚本/模块/ cmdlet扩展PowerShell时,尝试延续这一点有很多价值。如果你已经决定使用点源在当前范围内设置一个新的或现有的变量,那么我建议你找一个新的动词。

有关详细信息,请参阅Cmdlet Verbs on MSDN

相关问题