2

次のコード サンプルでは、​​元のオブジェクトと配列に格納されているコピーを比較すると、ステータスが等しくありません。なぜそれらが等しくないのか、この現象を理解したい:

$MyArray=@()
$MyCFG="" | Select-Object -Property ProjName,ProCFG

$MyCFG.ProjName="p1"
$MyCFG.ProCFG="c1"
$MyArray+=$MyCFG.PsObject.Copy()

$MyCFG.ProjName="p2"
$MyCFG.ProCFG="c2"
$MyArray+=$MyCFG.PsObject.Copy()

$MyCFG.ProjName="p3"
$MyCFG.ProCFG="c3"
$MyArray+=$MyCFG.PsObject.Copy()


ForEach($obj in $MyArray)
{
    if ($MyCFG -eq $obj)
    {Write-Host "Equal"}
    else
    {Write-Host "Unequal"}

}

最後のオブジェクト値、つまり $MyCFG.ProjName="p3" および $MyCFG.ProCFG="c3" は、$MyArray に格納されているものと同じであると想定されていますが、結果も等しくありません。

ただし、プロパティ値を比較することで適切に比較できます。つまり、次のようになります。

if (($MyCFG.ProjName -eq $obj.ProjName) -and ($MyCFG.ProCFG -eq $obj.ProCFG))

しかし、なぜオブジェクトの比較結果が等しくないのか疑問に思っています...

4

1 に答える 1

4

compare-objectこのように使用できます

ForEach($obj in $MyArray)
{ 
    if (compare-object $obj $mycfg -Property Projname,procfg)
    {Write-Host "Unequal"}
    else
    {Write-Host "Equal"}
}

properties必要なもの(この場合はすべて)を比較し、違いがあるかどうかをテストします。

于 2013-09-18T13:30:10.600 に答える