or1ko's diary

日々を書きます

PSCustomObjectの比較

プロパティ名が同じでも -eq で比較するとFalseになる。
プロパティだけ取り出して、Compare-Objectで比較する。

$a = [PSCustomObject]@{ a = "a" }
$b = [PSCustomObject]@{ a = "a" }
$c = [PSCustomObject]@{ a = "c" }

$np = $a | Get-Member -Type NoteProperty | ForEach-Object { $_.Name }
(Compare-Object -Property $np $a $b).Count -eq 0

# 等しくない例。Falseになる。
(Compare-Object -Property $np $a $c).Count -eq 0

# Equalsおよび-eqでの比較はFalseになる
$a.Equals($b)
$a -eq $b

もう少し簡単な方法ないだろうか