亀の甲羅2

今日もまた朝とく起きて励まなん窓に明るきありあけの月

powershell 配列同士の比較(差分取得)

$a = @("a", "b", "c");
$b = @("d", "b", "v");


Write-Host "---- same ----"
$same = Compare-Object $a $b -IncludeEqual -ExcludeDifferent | Select-Object -ExpandProperty InputObject
$same


Write-Host "---- diff ----"
$diff = Compare-Object $a $b | Select-Object -ExpandProperty InputObject
$diff

Write-Host "---- $a-$b ----"
$diff = Compare-Object $a $b | Where-Object {$_.SideIndicator -eq "<="} | Select-Object -ExpandProperty InputObject
$diff

Write-Host "---- $b-$a (1) ----"
$diff = Compare-Object $b $a | Where-Object {$_.SideIndicator -eq "<="} | Select-Object -ExpandProperty InputObject
$diff

Write-Host "---- $b-$a (2) ----"
$diff = Compare-Object $a $b | Where-Object {$_.SideIndicator -eq "=>"} | Select-Object -ExpandProperty InputObject
$diff

Select-Object -ExpandProperty InputObjectが分からなかったので、Bingちゃんに聞いてみたところ下記の回答。

Select-Object -ExpandProperty InputObjectは、Select-Objectコマンドレットを使用して、InputObjectプロパティを展開しています。
-ExpandPropertyパラメーターは、指定されたプロパティの値を展開し、その値を出力します。

この場合、Compare-Objectコマンドレットの出力には、InputObjectプロパティが含まれており、その値が配列の要素です。
Select-Object -ExpandProperty InputObjectを使用することで、配列の要素だけが出力されます。

受信したメッセージ. Select-Object -ExpandProperty InputObjectは、Select-Objectコマンドレットを使用して、
InputObjectプロパティを展開しています。-ExpandPropertyパラメーターは、指定されたプロパティの値を展開し、
その値を出力します。 この場合、Compare-Objectコマンドレットの出力には、InputObjectプロパティが含まれており、
その値が配列の要素です。Select-Object -ExpandProperty InputObjectを使用することで、配列の要素だけが出力されます。

---- same ----
b
---- diff ----
d
v
a
c
---- a b c-d b v ----
a
c
---- d b v-a b c (1) ----
d
v
---- d b v-a b c (2) ----
d
v