2016-02-17 90 views
0

考慮樣品的powershell模塊sample.psm1其中出口單可變如下:Powershell的導入模塊:前綴導入的變量

$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在這種情況下)進口,可以通過全局名稱

強制有哪些可能的選項導入變量的前綴?處理導入變量的一般最佳做法是什麼?

手動前綴在模塊的聲明可以做模塊的變量,但它是一種醜陋的方式來命名空間

回答

0

在我看來,一般你不會想從一個模塊輸出變量,而是提供getter/setter函數,因爲.NET類通常不使用字段,而是使用屬性。

如果您在模塊上執行Import-Module-Verbose,您會看到函數帶前綴,變量不帶。我認爲這是一個強烈的表示,不支持變量的前綴。

但是,您可以使用此代碼訪問Mymodule中變量和函數:

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

這使訪問變量&功能模塊像前面命名變量&功能之外的模塊。 (如果使用該代碼訪問不在模塊中的變量,而是在外部作用域中訪問變量,則會在外部作用域中獲取變量,因爲模塊可以訪問外部作用域中的變量。)通過不導出模塊變量只有通過$myMod才能從模塊外訪問它。

所以不是一個名字空間,但很接近。