主題 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