PowerShell

【PowerShell】連想配列(hash_table)についてまとめ

2018年6月6日

こんにちは!そーまんです。

今回は、連想配列について書いてみました。

できるようになること

連想配列を使って配列と異なり、インデックス番号ではなく適切な添え字を入れることで添え字から名前を連想できるようにすることができます。

人の名前で言えばニックネームが添え字でそこから実際の名前を連想できるようなイメージだと思っていただければ分かりやすいかもしれません。


連想配列の概要

配列のキー(インデックス)が文字列となったものを連想配列といいます。

ちなみに配列について未だ知識がない方は以下の記事を見て頂けます参考になるかと思います。

復習になりますが、配列を作成した時に、キー(インデックス)は 0 から順に振られます。

配列のインデックスと値について(上がインデックスで下が値になります。)

配列ではインデックス番号と値の紐づけをしている一方で、連想配列では 以下の画像のように Value に対して Key を紐づけしています。

種類特徴
配列 インデックス番号と値の紐づけ
連想配列 Value に対して Key を紐づけ


それでは、どんな風に使うのか、イメージとして例を作成しました。

ここでは、住所と郵便番号が連想配列になっています。ここでは住所として東京都港区をキー (Key) とし、その住所の郵便番号として 105-0000 が値 (Value) としています。

つまり、文字のキーをもとにして値を設定した配列を連想配列と言います。住所と郵便番号を紐づけしているのです。

では、このイメージをもとに PowerShell で書いてみましょう。


連想配列の構文

連想配列の構文は以下のようになります。

キーと値を関連付ける為に =(イコール)を使用します。


連想配列のサンプルコード

では、先ほどの住所と郵便番号に置き換えてみます。

これで、連想配列を作る事ができました。


連想配列のメソッド・プロパティ

それでは、連想配列に対してどんなメソッドやプロパティがあるのか見てみたいと思います。

例えばメソッドだと連想配列に追加 (Add)したり、数を数えたりする (count) 事ができ、またプロパティだと連想配列内にキーと値を追加する (IsFixedSize) 事ができるかなどが確認できます。


以降、先ほどの住所と郵便番号が入った状態の連想配列をそのまま使います。

数を数えたい時は count メソッドが使えます。


連想配列からキーのみ取り出したい場合は keys メソッドが使えます。


値を取り出したい場合は values メソッドが使えます。


それでは特定のキーに対する値を取り出したい場合はどんな風に書くでしょうか。

簡単で、キーの名前を文字列で "(ダブルクォーテーション)で囲い、直接書けばいいだけです。東京都新宿区にあたる住所が表示されました。


配列ではできませんでしたが、連想配列内にキーと値を追加する事ができるか確認してみます。IsFixedSize メソッドを使います。

返り値は False ですので、連想配列は Fix(固定)ではない。という事になります。


固定ではないのであれば、早速追加してみましょう。東京都渋谷区を追加してみます。

連想配列されましたね。


連想配列のキーの表示を並び替えたい場合

郵便番号ではわかりにくいので、内容をサーバーに変更しました。

連想配列の後に .GetEumerator メソッドを使い、パイプさせて soft コマンドでプロパティである key を指定すると昇順に並べ替えることができます。恐らくこの方法が通常使われていると思います。降順にしたい場合は -Property key -Descending で可能です。


こんなこともできますよという意味で、他にも簡単に並べ替える場合は [ordered] 属性をつけてあげると並べ替えることができます。


連想配列のキーに対して、複数の値を指定したい場合

連想配列のキーに対して複数の値をしているすることもできます。波カッコで括って ; (セミコロン) で区切ってあげればできます。


最後に

いかがでしょうか。

連想配列が使えるようになってくると書ける処理内容がより高度になってくるかと思います。

では最後までお読みいただきありがとうございました!

  • この記事を書いた人

そーまん

セキュリティエンジニアやってます。
ブログ歴3年。PVは月15万PV程度。
趣味はボクシング、筋トレ、登山です。
穏やかで人見知りな性格です。

人気記事

1

こんにちは!そーまんです。 今回は、PC に適用されている GPO を確認する方法について書きました。 本題に入る前に、一応参考までにGPOの適用タイミングについての記事をここに貼りましたので、必要に ...

2

こんにちは!そーまんです。 今回は sysprep について、全体的に PC をセットアップする観点から書いてみました。長々と書いてあります。まずは前置きからです。 まずはじめに 組織では PC のラ ...

3

こんにちは!そーまんです。 今回は、グループポリシー (GPO) を使って、特定のコンピューターに対して、ドメインユーザーに ローカル管理者権限 (以下は特権と記載) を付与する方法について書きました ...

4

こんにちは!そーまんです。 今回は、Windows サインイン後に一時ユーザープロファイルが読み込まれてしまった場合の解決方法について書きました。 Windows 10 の検証環境をいじってたらサイン ...

5

こんにちは!そーまんです。 今回は、ユーザープロファイルを削除する方法について書いてみました。 企業の場合よくあることですが、1 台の PC を共有 PC として複数人で使ったり、また余り無いかもしれ ...

6

こんにちは!SE ブログの相馬です。       今回は、繰り返し文について書いてみました。PowerShell では他のプログラミング言語同様、繰り返し処理を行うことが ...

7

コマンドを使って CPU とメモリの使用率をデータで取得してみましたので、例えば PC のトラブルシューティングで問題を再現させる際にデータを取得しておくと、原因の特定に役立つ場合があるかと思います。

8

既存の PC と同じ構成で別のメーカーの PC でマスターイメージを作る際、インストールされているアプリを同一にする為に必要になるかと思います。

9

企業で多くの GPO が適用されている環境では、PC に GPO が適用されなかったりする問題が発生する場合があるかと思います。その中でも、コンピューターの構成またはユーザーの構成のどちらかで、...

10

こんにちは!そーまんです。 今回は、Windows Server 2019 で NTP サーバーと同期する方法について書きました。 NTP サーバーの必要性や時刻同期の重要性を理解することは社内のシス ...

-PowerShell
-