繁体   English   中英

如何从 PowerShell 中的模块运行空间获取变量?

[英]How do I get a variable from a module run space in PowerShell?

有一个模块有一个“初始化”function,它设置一个变量,该变量在模块中的其他脚本/函数中使用,以验证初始化 function 是否已运行。 就像是

Start-InitializeThing
Connect to the API
    
$Script:SNOWinit = $true

然后在另一个脚本/函数中它将检查:

if ($Script:SNOWinit -eq $true) { Do the thing!}

有没有办法在同一个 PowerShell window 但不是同一个模块中获取 $Script:SNOWinit?

我想运行相同的检查,但针对模块中不存在的不同 function。

我可以这样做吗,我可以像模块运行空间那样“挖掘”并检查该变量吗? 我没有办法编辑模块中的函数,所以我无法在初始化脚本运行后更改设置的变量类型。

假设感兴趣的模块名为foo并且它已经被导入(加载):

. (Get-Module foo) { $SNOWinit }

如果要按需导入模块:

. (Import-Module -PassThru foo) { $SNOWinit }
  • 上面的代码返回在模块foo的根 scope 中定义的$SNOWinit变量的值。

  • 请注意,通常建议使用此技术,因为它违反了模块提供的预期封装。 在手头的例子中, $SNOWinit作为一个非公共模块变量,应该被视为一个实现细节,这就是为什么你不应该依赖它在生产代码中的存在。

来自圣经,WPiA。 呼叫接线员更神秘的用途。

# get a variable in module scope
$m = get-module counter
& $m Get-Variable count
& $m Set-Variable count 33

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM