PowerShell:比较存储在数组结果中的对象不相等

时间:2013-09-18 13:08:22

标签: powershell comparison

在下面的代码示例中,原始对象与其在数组中存储的副本的比较会导致状态不平等。我想了解这种现象,为什么它们不相同:

$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中存储的相同,但它们也会导致Unequal。

虽然可以通过比较其属性值来正确比较,即:

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

但想知道为什么对象比较结果不平等......

1 个答案:

答案 0 :(得分:4)

您可以这样使用compare-object

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

比较你需要的properties(在这种情况下都是)并测试是否存在一些差异。