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




目錄