簡體   English   中英

Powershell Import-Module:前綴導入變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM