トピック
about_Hash_Tables
簡易説明
Windows PowerShell でのハッシュ テーブルの作成、使用、および並べ替えの方法について説明します。
詳細説明
ハッシュ テーブルとは、ディクショナリまたは連想配列とも呼ばれ、1 つ以上の名前/値ペアを保存
するコンパクトなデータ構造のことです。たとえば、ハッシュ テーブルには、一連の名前と従業員
ID、コンピューター名と IP アドレス、またはメッセージ ID とメッセージ テキストを格納するこ
とができます。
ハッシュ テーブルは、データの検索および取得において非常に効率が良いため、よく使用されます。
ハッシュ テーブルを使用すると、Windows PowerShell で一覧の保存および集計プロパティの作成がで
きます。また、Windows PowerShell は、文字列をハッシュ テーブルに変換する ConvertFrom-
StringData というコマンドレットを備えています。
ハッシュ テーブルの作成
ハッシュ テーブルでは、項目は次のように名前/値ペアとして並べられています。
Msg1="Please enter your password."
Msg2="The path parameter is required."Msg3="The alias of
Get-Command is gcm."
値は名前にマッピングされている、つまり関連付けられているため、名前を渡すと、値が返されます。
Windows PowerShell では、ハッシュ テーブルの構文は次のとおりです。
@{ <name> = <value>; [<name> = <value> ] ...}
ハッシュ テーブルを作成する場合は、次のガイドラインに従ってください。
- ハッシュ テーブルは記号 (@) で始めます。
- ハッシュ テーブルは中かっこ ({}) で囲みます。
- ハッシュ テーブルの内容として、1 つ以上の名前と値のペアを入力します。
- 名前と値は等号 (=) で区切ります。
- 名前/値ペアを区切るには、セミコロン (;) を使用します。
- 名前または値にスペースが含まれる場合は、名前または値を引用符で囲みます。
たとえば、前のユーザー メッセージのハッシュ テーブルは次のとおりです。
@{
Msg1="Please enter your password.";
Msg2="The path parameter is required."; Msg3="The alias of
Get-Command is gcm."; }
スクリプトおよびコマンドでハッシュ テーブルを使用するには、ハッシュ テーブルを変数に保存
します。変数の値はハッシュ テーブル オブジェクト (System.Collections.Hashtable)
で、名前/値ペアの各名前はハッシュ テーブル オブジェクトのプロパティです。
次のコマンドでは、ユーザー/メッセージのハッシュ テーブルを $a 変数に保存し、ドット メソ
ッドを使用して値を表示します。
C:\PS> $a = @{
>> Msg1="Please enter your password.";
>> Msg2="The path parameter is required.";
>> Msg3="The alias of Get-Command is gcm.";
>> }
C:\PS> $a
Name Value
---- -----
Msg1 Please enter your password.
Msg3 The alias of Get-Command is gcm.
Msg2 The path parameter is required.
C:\PS> $a.Msg1
Please enter your password.
ハッシュ テーブルは、1 つの型のデータには制限されません。ハッシュ テーブルにはどのような
データ型でも入力でき、1 つのハッシュ テーブルでデータ型を組み合わせることができます。たと
えば、整数、コマンドレットの呼び出し、および文字列を含むハッシュ テーブルを作成することが
できます。
ハッシュ テーブルの並べ替え
ハッシュ テーブルをキーまたは値のアルファベット順で並べ替えるには、ハッシュ テーブルの
GetEnumerator メソッドを使用してハッシュ テーブルのキーおよび値を取得し、Sort-Object コマン
ドレットを使用してキーおよび値を並べ替えます。
たとえば、次のコマンドでは、$a 内のハッシュ テーブルはキーのアルファベット順に並べ替えら
れます。
C:\PS> $a.getenumerator() | sort-object -property key
Name Value
---- -----
Msg1 Please enter your password.
Msg2 The path parameter is required.
Msg3 The alias of Get-Command is gcm.
次のコマンドでは、同じメソッドを使用してハッシュ値を降順に並べ替えます。
C:\PS> $a.getenumerator() | sort-object -property value -descending
Name Value
---- -----
Msg2 The path parameter is required.
Msg3 The alias of Get-Command is gcm.
Msg1 Please enter your password.
ConvertFrom-StringData
ConvertFrom-StringData コマンドレットは、名前/値ペアの文字列または here-string をハッシ
ュ テーブルに変換します。 ConvertFrom-StringData コマンドレットは、スクリプトのデータ
セクションで安全に使用でき、このコマンドレットと Import-LocalizedData コマンドレット
を共に使用すると、現在のユーザーのユーザー インターフェイス (UI) カルチャにユーザー メッ
セージを表示できます。
here-string は、ハッシュ テーブルの値が引用符を含んでいるときに非常に便利です (here-
string の詳細については、「about_Quoting_Rules」を参照してください)。
次の例は、前の例のユーザー メッセージの here-string を作成する方法、および
ConvertFrom-StringData を使用してこれを文字列からハッシュ テーブルに変換する方法を示
しています。
次のコマンドは、名前/値ペアの here-string を作成し、これを $string 変数に保存します。
C:\PS> $string = @"
Msg1="Please enter your password."
Msg2="The path parameter is required."
Msg3="The alias of Get-Command is gcm."
"@
このコマンドは、ConvertFrom-StringData コマンドレットを使用して、here-string をハッシュ
テーブルに変換します。
C:\PS> convertfrom-stringdata $string
Name Value
---- -----
Msg3 "The alias of Get-Command is gcm."
Msg2 "The path parameter is required."
Msg1 "Please enter your password."
関連項目
about_Arrays
about_Quoting_Rules
about_Script_Internationalization
ConvertFrom-StringData
Import-LocalizedData