はじめてハッシュテーブルに出会うと、それが何であり、どのようにスクリプトやコマンドで重要な役割を果たすのかについて疑問に思うかもしれません。心配しないでください!このチュートリアルでは、PowerShellハッシュテーブルの使い方を始めるのに役立ちます。
要するに、ハッシュテーブルは、キーと値のペアを使ってデータを格納し、効率的にアクセスできるようにするものです。そして、このチュートリアルでは、ハッシュテーブルの基礎を学び、PowerShellスクリプトやコマンドでそれらをどのように使用するかを学びます。
さらに学んで、PowerShellハッシュテーブルでスキルを拡張しましょう!
前提条件
このチュートリアルは、実演形式で行われます。一緒に進むためには、PowerShell v5以上がインストールされ、設定されているシステムがあることを確認してください。このチュートリアルでは、PowerShell 7を使用したWindows 10を使用しますが、他のバージョンのPowerShellやWindowsでも機能します。
PowerShellハッシュテーブルの作成
特定のデータを取得することは、「草の中の針を探す」状況になることがあります。しかし、ハッシュテーブルを使用すると、膨大なデータコレクションの中から特定のアイテムを素早く検索することができます。
PowerShellでは、ハッシュテーブルは、構成データの格納、コマンドレットへの引数の渡し、およびスクリプトでのデータの格納など、さまざまな方法で使用される柔軟なデータ構造です。
PowerShellハッシュテーブルの動作を確認するには、まず次のようにしてハッシュテーブルを作成する必要があります:
1. PowerShellセッションを開き、以下のコマンドを実行します。このコマンドは出力を生成しないが、空のハッシュテーブルを参照するためのname
という変数を宣言します。
下記のように、PowerShellの配列と同様に、ハッシュテーブルも@
記号を使用して定義されます。
2. 次に、以下のコマンドを実行してname
変数の型(GetType()
)を確認します。
name
変数の型は、下記のようにHashtableです。この情報により、ハッシュテーブルが正常に作成されたことが確認されます。

3. ハッシュテーブルの確認が完了したら、以下のコードを実行してハッシュテーブルが空であるかどうかをチェックします。
以下のコードは、Count
プロパティが0
と等しい(-eq
)かどうかを判定し、対応するメッセージを表示します。
以下は、ハッシュテーブルが空であり、キーと値のペアが定義されていないことがわかります。

PowerShellのハッシュテーブルにアイテムを追加する
まず、実質的に空のPowerShellのハッシュテーブルを作成しましたが、アイテムを追加しない限りは役に立ちません。では、どのように追加するのでしょうか? ハッシュテーブルにキーと値のペアを追加することで行います。
配列と似ていますが、インデックスとして整数ではなく、PowerShellのハッシュテーブルではキー(任意のデータ型)を使用して値を識別します。この機能により、キーは対応する値を素早く見つけることができるため、ハッシュテーブルからのアイテムの挿入、検索、削除が迅速に行えます。
以下は、PowerShellのハッシュテーブルにキーと値のペアを追加するための構文です。ここで:
$hashtable
– ハッシュテーブルの名前。$key
– キーの名前で、大文字と小文字を区別しません。たとえば、「FirstName」と「firstname」はハッシュテーブル内では同じキーと見なされます。$value
– キーに関連付ける値。
次のコードを実行し、コンソールに出力は生成されませんが、キーと値のペアを宣言し、それらをハッシュテーブル($name
)に追加します。
ハッシュテーブルでは、キーに対してハッシュ関数を実行することで、キーをハッシュテーブルの内部データ構造内の特定の場所にマップします。
? ハッシュテーブルの値は、数値、文字列、配列、オブジェクト、およびその他のデータ型といった任意の型にすることができます。
以下のコードを再実行して、ハッシュテーブルが空でないかどうかを確認してください。
以下に示すように、今回はハッシュテーブルが空でないというメッセージが表示されます。

PowerShellハッシュテーブルからアイテムを取得する
ハッシュテーブルが空でないと自信を持っているとします。ハッシュテーブルにどのアイテムが存在するかをどのように知ることができますか?幸いなことに、ハッシュテーブルからアイテムを取得することもできます。
以下のコードを実行して、ハッシュテーブルからすべてのアイテムをキーと値のペアで1行ずつ取得して出力します。

以下のコードを実行して、ハッシュテーブル内のすべてのアイテムをコンソールに取得して出力します。
? このチュートリアルでは、しばしば以下のコードを使用します。同じコードを複数回コピーして貼り付けることを避けるために、関数を作成することができますが、それはこのチュートリアルの範囲外です。
今回は、リストされたアイテムの中でキーと値がどれかの指示を見ることができます。

事前定義値を使用してハッシュテーブルを作成する
これまで、空のハッシュテーブルの作成だけを見てきました。しかし、特定の値が常にハッシュテーブルで必要になることがわかっている場合は、事前に値を定義して作成することができます。
事前定義値を持つハッシュテーブルを使用すると、後で値をハッシュテーブルに追加する必要がないため、時間を節約し、コードを効率的にすることができます。
? ハッシュテーブルを作成しても、出力されません。しかし心配はいりません。このチュートリアルでは、作成後の各ハッシュテーブルを確認します。
1. 以下のコマンドを実行して、3つのキーと値のペアを持つハッシュテーブル ($hashtable1
) を作成します。
2. 次に、以下のコードを実行して、新しいハッシュテーブル (hashtable1
) が存在することを確認します。
各キーと値のペアの値が期待通りに画面に表示されることがわかります。この出力により、事前に定義された値がハッシュテーブルの適切な場所に格納されていることが確認されます。

3. 以下のコードを実行して、ループ(または配列)を使用して事前定義された値を持つハッシュテーブル($hashtable2
)を作成します。
4. 最後に、以下のコードを実行して、新しいハッシュテーブル(hashtable2
)が正常に作成されたことを確認します。
以下の出力により、ループメソッドが、事前定義された値を持つハッシュテーブルを作成する際に機能することが確認されます。ただし、アイテムがランダムにリストされているため、修正方法については次のセクションに進んでください。

ハッシュテーブル内のアイテムの順序付きリストの作成
デフォルトでは、ハッシュテーブル内のアイテムは特定の順序で格納されません。しかし、順序付きのリストが必要な場合はどうしますか?ハッシュテーブル内のアイテムの順序付きリストを作成して、データを特定の順序で配置することもできます。
ハッシュテーブル内のアイテムの順序付きリストを作成するには、次のように[ordered]
属性を使用します:
1. 以下のコードを実行して、ハッシュテーブル($hashtable3
)内のアイテムの[ordered]
リストを作成します。
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)に新しいキーと値のペア(Key4 = NewValue4)を追加します。
新しいキーと値のペアを追加すると、既存のハッシュテーブルのリストを更新するような出力は生成されませんが、次の手順で変更が確認されます。
3. 以下のコードを実行して、ハッシュテーブル($hashtable3)のキーの値が更新されたことを確認します。

? PowerShellでは、ハッシュテーブルの各キーは一意である必要があります。既にハッシュテーブルに存在するキーと値のペアを追加しようとすると、以下のようなエラーが発生します。このエラーを避けるためには、次の手順に進んでください。

4. 以下のコードを実行し、キーを追加する前にハッシュテーブル内にキーが既に存在するかどうかを確認するためにContains()メソッドを使用します。
新しいキーが存在しない場合、以下のメッセージが表示されます。新しいキーがハッシュテーブルに追加されました。

さもなければ、以下のように、すでに存在するキーを試している場合はメッセージが表示されます。

5. 最後に、下記のコードを再実行して、ハッシュテーブル($hashtable3
)内のすべてのアイテムを取得します。
以下では、新しく追加されたキー(Key5)と、これまでにハッシュテーブルに追加したその他のアイテムが表示されます。

ハッシュテーブルからアイテムを削除する
特に不要なものを含むハッシュテーブルには、混乱を招く可能性があります。不要なアイテムを削除することで、ハッシュテーブルから必要のないアイテムを削除することができます。
ハッシュテーブルにユーザーとその情報のリストが含まれていると仮定します。その場合は、ハッシュテーブルから、もはやアクティブでないユーザーを削除します。
以下のコードを実行して、ハッシュテーブル($hashtable3
)から特定のアイテム(Key1
)を削除します。
以下の出力では、キーが削除されたことを示すメッセージが表示されます。しかし、キーが存在しない場合は、キーが見つからなかったことを示すメッセージが表示されます。

次に、ハッシュテーブル内のすべてのアイテムをチェックして、アイテムの削除が成功したかどうかを検証するために、次のコードを実行します。
以下、ハッシュテーブル内において、’Key5’というキーのキー-値のペアが存在しなくなったことを確認できます。

結論
キー-値のペア構造と高速なアクセスを備えたPowerShellのハッシュテーブルは、さまざまなシナリオで大量のデータを管理するのに適しています。そして、このチュートリアルでは、ハッシュテーブルの作成、追加、更新、および削除方法を学びました。これらすべてが、スクリプトでハッシュテーブルを効果的に使用するスキルを提供します。
なぜ新しく獲得したスキルを次のレベルに引き上げないのでしょうか?ハッシュテーブルをより高度なタスクに取り込んでみてください。例えば、データの操作や変換などです。または、PowerShellで他のデータ構造(配列やオブジェクトなど)と組み合わせて、より複雑な問題を解決するためにハッシュテーブルを実験的に使用してみてください。