Home > Windows にまつわる e.t.c.

PowerShell のハッシュテーブルの使い方


ハッシュテーブル(連想配列)とは、キーと値をセットに持ったデータ構造で、キーを与えると、対応する値が得られます。

例えば、適用されている KB 番号から、いつの Windows Update が適用されているか調べるといった使い方ができます。

 

初期値のセット

ハッシュテーブルに初期値をセットする場合は、@{} 内に キー = 値 形式で記述します(改行 または ; で複数記述)

こんな感じですね(KB番号と Windows Update 日付のハッシュテーブルの例)

# ハッシュテーブルの初期値設定
$HashTable = @{
    "KB4019217" = [datetime]"2017/5/17"
    "KB4019215" = [datetime]"2017/5/10"
    "KB4019213" = [datetime]"2017/5/10"
    "KB4015553" = [datetime]"2017/4/19"
    "KB4015550" = [datetime]"2017/4/11"
    "KB4015547" = [datetime]"2017/4/12"
    "KB4012219" = [datetime]"2017/3/22"
    "KB4012216" = [datetime]"2017/3/14"
    "KB4012213" = [datetime]"2017/3/14"
    "KB3205401" = [datetime]"2016/12/13"
    "KB3205400" = [datetime]"2016/12/13"
    "KB3197875" = [datetime]"2016/11/15"
    "KB3197873" = [datetime]"2016/11/8"
    "KB3197874" = [datetime]"2016/11/8"
    "KB3192404" = [datetime]"2016/10/18"
    "KB3192392" = [datetime]"2016/10/11"
    "KB3185331" = [datetime]"2016/10/11"
    "KB3185279" = [datetime]"2016/9/20"
    "KB3179574" = [datetime]"2016/8/16"
    "KB3172614" = [datetime]"2016/7/21"
}

 

キーを与えて値を取得する

キーから値を取得するには、以下のようキーを渡します。

$HashTable[キー]

 

例えばこんな感じ

$Value = $HashTable["KB3205400"]

 

キーがヒットしなかった場合は $null が帰ってきます。

 

キーがハッシュテーブルに含まれているかを確認する

キーがハッシュテーブルに含まれているかを確認するには、ContainsKey() メソッドにキーを渡します。
( ContainsKey() メソッドと Contains() メソッドは同じなので、Contains() としても良いです )

キーが含まれていれば $true、含まれていなければ $false が帰ってきます。

$HashTable.ContainsKey(キー)

 

例えばこんな感じ

if( $HashTable.ContainsKey("KB3205400") -eq $true ){
    echo "キーは存在します"
}

 

値がハッシュテーブルに含まれているかを確認する

同様に、値が含まれているかの確認は、ContainsValue() メソッドを使います

$HashTable.ContainsValue(値)

 

キーを全て取得する

キーを全て取得する場合は、Keys メソッドを使います

$HashTable.Keys

 

Keys で取得した値は foreach で回す事は出来るのですが、配列ではなく KeyCollection なので $Keys[インデックス] の様に配列として扱う事が出来ません。

# ダメな例
$Keys = $HashTable.Keys
echo $Keys[1] # ← この方法ではキーを取り出す事が出来ない

 

配列としてキーを扱いたい場合は、foreach を使って明示的に配列に格納する必要があります。

こんな感じですね

# KeyCollection としてのキーを取得
$KeyCollectionKeys = $HashTable.Keys

# 配列に格納
$Keys = @()
foreach ( $KeyCollectionKey in $KeyCollectionKeys ){
    $Keys += $KeyCollectionKey
}

 

値を全て取得する

キーの全取得と同様に、値を全て取得する場合は Values メソッドを使います。

$HashTable.Values

 

要素の追加

ハッシュテーブルに要素を追加する場合は、add(キー, 値) メソッドを使います。

こんな感じ

$HashTable.add("KB4019218", [datetime]"2017/5/17")

 

要素の削除

ハッシュテーブルにある要素を削除する場合は Remove(キー) メソッドを使います。

$HashTable.Remove("KB4019218")

 

値の変更

要素の値を変更する場合は、値を代入することができます。

$HashTable[キー] = 値

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.