初次遇到雜湊表,您可能會想知道它們是什麼,以及它們在您的腳本或命令中如何發揮關鍵作用。別擔心!本教程將幫助您開始使用 PowerShell 雜湊表。
簡而言之,雜湊表允許您使用鍵-值對來存儲和操作數據,這樣可以快速有效地訪問它們。在本教程中,您將學習雜湊表的基礎知識,以及如何在 PowerShell 腳本和命令中使用它們。
繼續閱讀,並開始擴展您的 PowerShell 雜湊表技能!
先備知識
本教程將進行實踐演示。請確保您的系統已安裝並配置了 PowerShell v5+。本教程使用帶有PowerShell 7的 Windows 10,但其他版本的 PowerShell 和 Windows 也適用。
創建 PowerShell 雜湊表
在某些情況下,檢索特定數據可能會變成“大海撈針”的情況。但是使用雜湊表,您可以快速搜索大量數據中的特定項目。
在 PowerShell 中,雜湊表是靈活的數據結構,可用於多種方式,例如存儲配置數據、傳遞參數給 cmdlet,以及在腳本中存儲數據。
要了解 PowerShell 雜湊表的工作原理,您首先需要創建一個,如下所示:
1. 開啟 PowerShell 會話,運行以下命令,該命令不會產生輸出,但會聲明一個名為name
的變量來引用一個空的 hashtable。
如下所示,與 PowerShell 中的數組類似,hashtable 使用@
符號定義。
2. 接下來,運行以下命令來驗證name
變量的類型(GetType()
)。
name
變量的類型是Hashtable,如下所示。此信息確認了您的 hashtable 已成功創建。

3. 驗證您的 hashtable 後,運行以下代碼來檢查 hashtable 是否為空。
以下代碼確定Count
屬性是否等於(-eq
)0
,並打印相應的消息。
下面你可以看到哈希表是空的,因为你剛剛創建它,還沒有在裡面定義鍵值對。

將項目添加到PowerShell哈希表
你剛剛創建了一個幾乎是空的PowerShell哈希表,只有在添加項目時才有用。如何添加呢?通過將鍵值對添加到哈希表中。
與數組類似,但是PowerShell哈希表使用鍵(可以是任何數據類型)來識別值。這個特性使得可以快速插入、檢索和刪除哈希表中的項目,因為鍵可以快速定位到相應的值。
下面是將鍵值對添加到PowerShell哈希表的語法,其中:
$hashtable
– 哈希表的名稱。$key
– 鍵的名稱,它是大小寫不敏感的。例如,“FirstName”和“firstname”在哈希表中被視為相同的鍵。$value
– 要與鍵關聯的值。
運行以下代碼,它不會在控制台輸出,但是它定義了鍵值對並將它們添加到你的哈希表($name
)。
在哈希表中,鍵可以讓你執行哈希函數,將鍵映射到哈希表內部數據結構的特定位置。
? 哈希表的值可以是任何類型,例如數字、字符串、數組、對象和其他數據類型。
現在重新執行下面的代碼,檢查您的雜湊表是否為空。
如下所示,您將收到一條訊息,指出這次雜湊表不是空的。

從 PowerShell 雜湊表擷取項目
假設您確信您的雜湊表不是空的。您如何知道雜湊表中存在哪些項目呢?幸運的是,您也可以從雜湊表中擷取項目。
執行下面的代碼,以鍵值對的形式擷取並輸出(Write-Output
)雜湊表中的所有項目,每行一個。

現在執行下面的代碼,以擷取並將雜湊表中的所有項目列印(Write-Output
)到控制台。
? 請注意,在本教程中,您將經常使用以下代碼。通過創建一個函數,您可以避免多次複製和粘貼相同的代碼,但這超出了本教程的範圍。
這一次,您可以在列出的項目中看到哪些是鍵和值的指示。

使用預定義值創建哈希表
到目前為止,您只看過如何創建空的哈希表。但是,如果您知道在您的哈希表中始終需要某些值,您可以創建一個帶有預定義值的哈希表。
具有預定義值的哈希表可以節省您的時間,使您的代碼更高效,因為您不需要在以後將值添加到哈希表中。
? 請注意,創建哈希表不會產生輸出。但不用擔心,在本教程中,您將驗證每個哈希表的創建後的情況。
1. 執行以下命令創建一個具有三個鍵值對的哈希表($hashtable1
)。
2. 接下來,執行以下代碼驗證新的哈希表(hashtable1
)是否存在。
您將看到每個鍵值對的值按預期在屏幕上打印出來。此輸出確認了預定的值存儲在哈希表中的適當位置。

3. 現在,運行以下代碼以使用循環(或數組)創建具有預定值的哈希表($hashtable2
)。
4. 最後,運行以下代碼來驗證新哈希表(hashtable2
)已成功創建。
以下輸出確認了使用循環方法創建具有預定值的哈希表的正常運作。但由於項目是隨機列出的,請跳轉到下一節進行修復。

在哈希表中創建有序項目列表
默認情況下,哈希表中的項目不以特定順序存儲。但如果您需要有序列表該怎麼辦?您也可以在哈希表中創建有序項目列表,以特定順序排列數據。
要在哈希表中創建有序項目列表,請按照以下方式使用[ordered]
屬性:
1. 執行以下代碼以創建一個包含散列表項目的有序列表($hashtable3
)。
2. 接下來,執行以下代碼來驗證已成功創建了散列表的有序列表。
如下所示,列出的項目保持在創建散列表時定義的順序。
使用有序散列表的一些可能好處包括但不限於以下:
Benefits | Description |
Easier to read and debug | The elements are displayed in a predictable order, which can be especially useful if you work with many elements of a large hashtable. |
Improved performance | An ordered hashtable can be more efficient when accessing elements frequently in a specific order. |

3. 最後,調用您的有序散列表($hashtable3
)以進一步確認您仍將獲得有序的項目列表。
下面的輸出確認,無論您如何訪問散列表,您仍將獲得有序的項目列表。

更新散列表中的現有項目
數據不斷變化,如果您有現有的散列表,則更新它們是一項至關重要的任務。例如,您正在使用散列表存儲配置值。如果是這樣,則可能需要在配置更改時更新鍵的值。
要更新 PowerShell 散列表,使用 =
分配運算符即可,如下所示:
1. 執行以下命令,該命令不提供輸出,但將 $hashtable3
中的 Key2
鍵的值更新為 NewValue2
。
下一步,執行以下命令以在散列表($hashtable3
)中Add()
一個新的鍵-值對(Key4 = NewValue4
)。
添加新的鍵-值對不會像更新散列表中現有列表那樣產生輸出,但您將在以下步驟中驗證更改。
3. 執行以下代碼以驗證散列表($hashtable3
)中鍵的值是否已更新。

? 在PowerShell中,散列表中的每個鍵都必須是唯一的。如果嘗試添加散列表中已有的鍵-值對,將收到如下錯誤。為避免此錯誤,跳至以下步驟。

4. 現在,執行以下代碼,使用Contains()
方法檢查要添加的鍵是否已存在於散列表中,然後再添加鍵-值對。
如果新鍵不存在,您將收到下面的消息,說明新鍵已添加到散列表中。

否則,如下所示,如果您試圖使用的鍵已存在,則會收到一條消息。

5. 最後,重新運行下面的代碼以檢索散列表($hashtable3
)中的所有項目。
在下面,您可以看到新添加的鍵(Key5)以及到目前為止添加到散列表中的其他項目。

從散列表中刪除項目
散列表中的項目太多,特別是不必要的項目,可能只會導致混亂。從散列表中刪除不再相關或不再需要的項目將對您有所幫助。
假設您的散列表包含一個用戶列表及其信息。如果是這樣,如果用戶不再活躍,請從散列表中刪除用戶。
運行下面的代碼從散列表($hashtable3
)中刪除特定項目(Key1
)。
下面的輸出打印了一條消息,說明該鍵已被刪除。但是,如果該鍵不存在,則會收到一條消息,說明該鍵未找到。

現在,運行以下代碼檢查散列表中的所有項目,並驗證項目是否成功刪除。
以下,您可以验证在您的哈希表中,具有键‘Key5’的键值对已不再存在。

結論
憑藉鍵值對結構和快速訪問,PowerShell 哈希表非常適合在各種情境中管理大量數據。在本教程中,您學會了如何創建、添加、更新和刪除哈希表中的項目。所有這些都使您具備在腳本中有效使用哈希表的技能。
為什麼不將您新獲得的技能提升到更高水平呢?考慮將哈希表融入到您的腳本中,以執行更高級的任務,例如數據操作和轉換。或者試驗將哈希表與PowerShell中的其他數據結構結合,例如數組和對象,以解決更複雜的問題。