Powershell Import-Module:前缀导入的变量

时间:2016-02-17 00:04:18

标签: powershell

考虑示例powershell模块sample.psm1,它导出单个变量,如下所示:

$ROOT = "C:\root"
Export-ModuleMember -Variable ROOT

可以导入指定前缀:

Import-Module .\sample.psm1 -Prefix "Sample::" -Force

尽管前缀适用于引用模块函数(例如,您现在可以执行Sample::SomeFunction),但它似乎不适用于变量,即

$Sample::ROOT 工作,

也没有
  • Sample::ROOT
  • $(Sample::ROOT)
  • Sample::$ROOT

它们是导入的,只能通过全局名称(在这种情况下为$ROOT

在导入的变量上强制使用前缀有哪些可能的选项?处理导入变量的一般最佳做法是什么?

在模块声明中手动添加模块变量可以做到,但这对于命名空间是一种丑陋的方法

1 个答案:

答案 0 :(得分:0)

在我看来,通常你不想从模块中导出变量,而是提供getter / setter函数,原因与.NET类通常不使用字段相同,而是属性。

如果在模块上使用Import-Module执行-Verbose,您会看到函数是前缀而变量不是。我认为这表明不支持变量前缀。

但是,您可以使用此代码访问 myModule 中的变量和函数:

$myMod = get-module myModule
& $myMod {$root}

这样可以访问变量&在命名变量&之前的模块中的函数模块外部的功能。 (如果使用该代码访问不在模块中但在外部作用域中的变量,则会在外部作用域中获取变量,因为模块可以访问外部作用域中的变量。)通过不导出模块变量从模块外部访问它的唯一方法是使用$myMod进行限定。

所以不是命名空间,而是关闭。