[英]Powershell Import-Module: prefix imported variables
考慮示例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
)
在導入的變量上強制使用前綴的可能選項是什么? 處理導入變量的一般最佳實踐是什么?
在模塊聲明中手動給模塊變量加上前綴是可以的,但這是命名空間上的一種難看的方法
在我看來,通常您不想從模塊中導出變量,而是提供getter / setter函數,原因與.NET類通常不使用字段而是使用屬性的原因相同。
如果在Import-Module
使用-Verbose
執行Import-Module
,則會看到函數帶有前綴,變量沒有帶前綴。 我認為這是不支持變量前綴的有力說明。
但是,您可以使用以下代碼訪問myModule中的變量和函數:
$myMod = get-module myModule
& $myMod {$root}
這樣就可以訪問模塊中的變量和函數,而不是模塊外部的已命名變量和函數。 (如果您使用該代碼訪問不在模塊中但在外部作用域中的變量,則將在外部作用域中獲取變量,因為模塊可以訪問外部作用域中的變量。)通過不導出模塊變量,可以從模塊外部訪問它的唯一方法是使用$myMod
對其進行$myMod
。
因此,它不是一個名稱空間,而是封閉的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.