about_Using

簡短描述

可讓您指定要在工作階段中使用的命名空間。

詳細描述

using語句可讓您指定要在工作階段中使用的命名空間。 新增命名空間可簡化 .NET 類別和成員的使用方式,並可讓您從腳本模組和元件匯入類別。

語句 using 必須位於腳本或模組的任何其他語句之前。 沒有未批注的語句可以在其前面,包括參數。

using語句不得包含任何變數。

using語句與變數的範圍修飾詞不同using:。 如需詳細資訊,請參閱 about_Remote_Variables

命名空間語法

若要從 .NET 命名空間解析類型:

using namespace <.NET-namespace>

指定命名空間可讓您更輕鬆地依其簡短名稱參考類型。

範例 - 新增 typename 解析的命名空間

下列腳本會取得 「Hello World」 字串的密碼編譯哈希。

請注意 和 using namespace System.Textusing namespace System.IO 如何簡化 和 中 System.Text[Stream][MemoryStream] 中的System.IO參考[UnicodeEncoding]

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) 匯入類別和列舉。 它不會一致地匯入巢狀模組或腳本中定義的類別或列舉,這些類別或列舉會以點來源匯入根模組。 定義您想要直接在根模組中供模組外部使用者使用的類別和列舉。

在開發文本模組期間,通常會變更程式碼,然後使用 Force 參數載入新版的模組Import-Module。 這僅適用於根模組中函式的變更。 Import-Module 不會重載任何巢狀模組。 此外,沒有任何方法可以載入任何更新的類別或列舉。

若要確保您執行的是最新版本,您必須啟動新的工作階段。 在 PowerShell 中定義的類別和列舉,且無法卸除使用 using 語句匯入的類別和列舉。

範例 - 從文本模組載入類別

在此範例中,名為 CardGames 的 PowerShell 腳本模組會定義下列類別:

  • 甲板
  • Card

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。 不過,Cmdlet 會在 Add-Type 執行時 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