我有一个主脚本调用其他几个脚本,我需要将其他脚本中的变量加载到主脚本中,以便我可以将它们转储到html文件中。我尝试点源我正在调用的脚本,但是没有用,或者我做错了。任何帮助,将不胜感激。
脚本的示例部分:
.\get-cluster.ps1
$MyReport += Get-CustomHeader "Clusters not in compliance : $($CapacityInfo.count) ($MyReport += Get-HTMLTable $capacityinfo
$MyReport += Get-CustomHeaderClose
变量$capacityinfo
存在于get-cluster.ps1
脚本
答案 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。