PowerShell で配列の値が別の配列に含まれるかどうかを調べる
PowerShell で、ある配列 $expected
の値が別の配列 $actual
に含まれているかどうかを調べる方法について紹介します。
たとえば、「あるオブジェクトに任意のプロパティがすべて存在するか」を調べる「存在チェック」の用途などに使えます。
前提
調査対象の配列 $actual
にはいろいろな値が含まれているとします。
$actual = @("A", "B", "D", "E", "F", "G")
これに対して存在を調べる値が格納された $expected
は下記のようになっているとします。
$expected = @("B", "C", "D")
今回は $expected
の値がすべて $actual
に含まれるかどうかを知りたいとします。
ソースコード
これは $expected
と $actual
の要素の差を取ることに相当します。
いくつかやり方はありますが、今回は Where-Object
と -notcontains
を使用します。
$expected = @("B", "C", "D")
$actual = @("A", "B", "D", "E", "F", "G")
$missing = $expected | Where-Object { $actual -notcontains $_ }
$missing.Count -eq 0
$missing
の結果は $expected
にあって $actual
にない要素である "C"
となるはずです。
$missing.Count
が 0
であれば「すべて含まれる」ことになります。