about_Hash_Tables
主題
about_Hash_Tables
簡短描述
描述說明如何在 Windows PowerShell 中建立、使用和排序雜湊表。
完整描述
雜湊表 (也稱為字典或關聯陣列) 是壓縮的資料結構,可儲存一或多個名稱/值組。例如,
雜湊表可能包含一系列的名稱和員工識別碼、電腦名稱和 IP 位址,或者訊息識別碼和訊
息文字等。
雜湊表對於尋找和擷取資料非常有效,所以使用頻繁。您可以在 Windows PowerShell
中使用雜湊表來儲存清單,以及建立計算過的屬性。此外,Windows PowerShell 還具
有 ConvertFrom-StringData Cmdlet,可以將字串轉換成雜湊表。
建立雜湊表
雜湊表中的項目會依名稱/值組排列,例如:
Msg1="請輸入密碼。"
Msg2="路徑參數為必要項。"
Msg3="Get-Command 的別名為 gcm。"
值會與名稱對應或建立關聯,所以當您提交名稱時,Windows PowerShell 就會傳回
值。
在 Windows PowerShell 中,雜湊表的語法如下:
@{ <名稱> = <值>; [<名稱> = <值> ] ...}
當您建立雜湊表時,請遵循下列方針:
- 以 at 符號 (@) 開始雜湊表。
- 將雜湊表放在大括弧 ({}) 內。
- 輸入一或多個名稱/值組做為雜湊表的內容。
- 使用等號 (=) 將每個名稱與值分隔。
- 使用分號 (;) 來分隔名稱/值組。
- 如果名稱或值包含空格,請將其置於引號中。
例如,前述使用者訊息的雜湊表將類似以下:
@{
Msg1="請輸入密碼。";
Msg2="路徑參數為必要項。"; Msg3="Get-Command 的別名為 gcm。";
}
若要在指令碼和命令中使用雜湊表,請將其儲存在變數中。變數的值是雜湊表物件
(System.Collections.Hashtable),而名稱/值組中的每個名稱都是雜湊表物件的屬性。
下列命令會將使用者訊息雜湊表儲存在 $a 變數中,並使用點標記法來顯示值。
C:\PS> $a = @{
>> Msg1="請輸入密碼。";
>> Msg2="路徑參數為必要項。";
>> Msg3="Get-Command 的別名為 gcm。";
>> }
C:\PS> $a
名稱 值
---- -----
Msg1 請輸入密碼。
Msg3 Get-Command 的別名為 gcm。
Msg2 路徑參數為必要項。
C:\PS> $a.Msg1
請輸入密碼。
雜湊表不限於單一的資料類型。您可以在雜湊表中輸入任何資料類型,也可以在單一雜
湊表中結合多種資料類型。例如,您可以建立雜湊表以包含整數、Cmdlet 呼叫以及字串。
排序雜湊表
若要依索引鍵或值的字母順序排序雜湊表,請使用雜湊表的 GetEnumerator 方法來取
得雜湊表中的索引鍵或值,然後再使用 Sort-Object Cmdlet 加以排序。
例如,下列命令會將 $a 中的雜湊表依索引鍵的字母順序進行排序。
C:\PS> $a.getenumerator() | sort-object -property key
名稱 值
---- -----
Msg1 請輸入密碼。
Msg2 路徑參數為必要項。
Msg3 Get-Command 的別名為 gcm。
下列命令會使用相同的方法以遞減順序排序雜湊值。
C:\PS> $a.getenumerator() | sort-object -property value
-descending
名稱 值
---- -----
Msg2 路徑參數為必要項。
Msg3 Get-Command 的別名為 gcm。
Msg1 請輸入密碼。
ConvertFrom-StringData
ConvertFrom-StringData Cmdlet 會將字串或名稱/值組的 here-string 轉換
成雜湊表。您可以在指令碼的 Data 區段中安全地使用 ConvertFrom-StringData
Cmdlet,而且也可以將其搭配 Import-LocalizedData Cmdlet 使用,以目前使用
者的使用者介面 (UI) 文化特性顯示使用者訊息。
當雜湊表中的值包含引號時,here-string 就特別有用 (如需 here-string 的詳
細資訊,請參閱 about_Quoting_Rules)。
下列範例示範如何為前述範例中的使用者訊息建立 here-string,以及如何使用
ConvertFrom-StringData 將這些訊息從字串轉換為雜湊表。
下列命令會建立名稱/值組的 here-string,然後將其儲存在 $string 變數中。
C:\PS> $string = @"
Msg1="請輸入密碼。"
Msg2="路徑參數為必要項。" Msg3="Get-Command 的別名為 gcm。" "@
這個命令會使用 ConvertFrom-StringData Cmdlet 將 here-string 轉換成雜湊表
C:\PS> convertfrom-stringdata $string
名稱 值
---- -----
Msg3 "Get-Command 的別名為 gcm。"
Msg2 "路徑參數為必要項。"
Msg1 "請輸入密碼。"
請參閱
about_Arrays
about_Quoting_Rules
about_Script_Internationalization
ConvertFrom-StringData
Import-LocalizedData