昨日に続いてPowerShellの話題を。
ちょっと前に自作のスクリプトがうまく動作しないことがあって知ったのですが、Compare-Objectでオブジェクトを比較するときは-Property設定が必要な場合があります。例えば以下のように2つのオブジェクトを比較すると。
$a = New-Object -TypeName psobject -Property @{x = 1; y = 2}
$b = New-Object -TypeName psobject -Property @{x = 3; y = 4}
Compare-Object -ReferenceObject $a -DifferenceObject $b
この結果は、Nullとなり違いが出力されません。全然オブジェクトを比較してないじゃん。
Compare-Object -ReferenceObject $a -DifferenceObject $b -Property x,y
x y SideIndicator
- - -------------
3 4 =>
1 2 <=
とすると、違いが検出されます。普通にCompare-Objectするとプロパティの有無までの比較で、その内容までは比較しないんですね。プロパティの内容も比較するには-Propertyオプションを設定せよと。調べるとCompare-ObjectのFAQみたいですが、なんでこんな仕様にしたんですかね。