簡短描述
可讓您指定要在工作階段中使用的命名空間。
完整描述
using 語句可讓您指定要在工作階段中使用的命名空間。
新增命名空間可簡化 .NET 類別和成員的使用方式,並可讓您從腳本模組和元件匯入類別。
using 語句必須出現在腳本或模組中的任何其他語句之前。 不可在其前面放置未註釋的語句,包括參數。
using 語句不得包含任何變數。
using 語句與變數 using: 範圍修飾詞不同。 如需詳細資訊,請參閱 about_Remote_Variables。
命名空間語法
若要從 .NET 命名空間解析類型:
using namespace <.NET-namespace>
指定命名空間可讓您更輕鬆地依其簡短名稱參考類型。
範例 - 為 typename 解析新增命名空間
下列腳本會取得 「Hello World」 字串的密碼編譯哈希。
請注意,using namespace System.Text 和 using namespace System.IO 如何在 [UnicodeEncoding]中簡化 System.Text 和 [Stream] 和 [MemoryStream] 的 System.IO 參考。
using namespace System.Text
using namespace System.IO
[string]$string = "Hello World"
## Valid values are "SHA1", "SHA256", "SHA384", "SHA512", "MD5"
[string]$algorithm = "SHA256"
[byte[]]$stringBytes = [UnicodeEncoding]::Unicode.GetBytes($string)
[Stream]$memoryStream = [MemoryStream]::new($stringBytes)
$getFileHashSplat = @{
InputStream = $memoryStream
Algorithm = $algorithm
}
$hashFromStream = Get-FileHash @getFileHashSplat
$hashFromStream.Hash.ToString()
模組語法
若要從 PowerShell 模組載入類別和列舉:
using module <module-name>
<module-name> 的值可以是模組名稱、完整模組規格或模組檔案的路徑。
當 <module-name> 為路徑時,該路徑可以是完整限定路徑或相對路徑。 相對路徑會相對於包含 using 語句的腳本進行解析。
當 <module-name> 是名稱或模組規格時,PowerShell 會搜尋所指定模組 PSModulePath。
模組規格是具有下列索引鍵的哈希表。
-
ModuleName- 必要 指定模組名稱。 -
GUID- 可選 指定模組的 GUID。 - 同時 必要 至少指定下列三個鍵中的一個。
-
ModuleVersion- 指定模組的最低可接受的版本。 -
MaximumVersion- 指定模組的最大可接受的版本。 -
RequiredVersion- 指定模組的確切必要版本。 這無法與其他版本金鑰搭配使用。
-
Import-Module 和 #requires 語句只會匯入模組所定義的模組函式、別名和變數。 不會匯入類別和列舉。
using module 語句會從腳本模組或二進位模組的根模組 (ModuleToProcess) 匯入類別和列舉。 它不會一致地匯入巢狀模組或腳本中定義的類別或列舉,這些類別或列舉會以點來源匯入根模組。 定義您想要直接在根模組中供模組外部使用者使用的類別和列舉。
在開發文本模組期間,通常會變更程式碼,然後使用 Import-Module 搭配 Force 參數載入新版本的模組。 這僅適用於根模組中函式的變更。
Import-Module 不會重載任何巢狀模組。 此外,沒有任何方法可以載入任何更新的類別或列舉。
若要確保您執行的是最新版本,您必須啟動新會話。
在 PowerShell 中定義並使用 using 語句匯入的類別和列舉無法卸載。
範例 - 從文本模組載入類別
在此範例中,名為 CardGames 的 PowerShell 腳本模組 會定義下列類別:
- 甲板
- 卡片
Import-Module 和 #requires 語句只會匯入模組所定義的模組函式、別名和變數。 類別不會匯入。
using module 命令會匯入模組,並載入類別定義。
using module CardGames
[Deck]$deck = [Deck]::new()
$deck.Shuffle()
[Card[]]$hand1 = $deck.Deal(5)
[Card[]]$hand2 = $deck.Deal(5)
[Card[]]$hand3 = $deck.Deal(5)
組合語言語法
下列語法會在執行的開始階段,將 .NET 類型從組件載入到腳本中。 您必須使用完整指定的元件檔路徑。
using assembly <.NET-assembly-path>
using assembly 語句與使用 Add-Type Cmdlet 類似。
不過,Add-Type Cmdlet 會在執行 Add-Type 時新增類型,而不是在腳本執行開始時。 如需詳細資訊,請參閱 Add-Type。
範例 - 從組件載入類型
這個範例會載入組件,以便在處理資料時使用其類別。 下列文本會將數據轉換成 YAML 格式。
using assembly './YamlDotNet.dll'
using namespace YamlDotNet
$yamlSerializer = [Serialization.Serializer]::new()
$info = [ordered]@{
Inventory = @(
@{ Name = 'Apples' ; Count = 1234 }
@{ Name = 'Bagels' ; Count = 5678 }
)
CheckedAt = [datetime]'2023-01-01T01:01:01'
}
$yamlSerializer.Serialize($info)
Inventory:
- Name: Apples
Count: 1234
- Name: Bagels
Count: 5678
CheckedAt: 2023-01-01T01:01:01.0000000