Powershell:两个具有相同值的System.Object变量的相等条件为false

Powershell: Equal condition for two System.Object variable having same value coming as false

在我的 Powershell 脚本中,两个变量通过 sql 查询获取值,即使输入值似乎相同,if 条件返回 false 而不是 true。

如果相等条件不适用于系统对象,我可以使用什么条件来检查它们是否相等?

下面是 Powershell 脚本部分:

Echo "first_result:$first_result,second_result:$second_result"

Echo ""

if($first_result -eq $second_result){

Echo "True"

}

else{

Echo "False"

}

Echo ""

$first_result.getType()

$second_result.getType() 

输出:

我试过其他比较运算符 -like , -match。甚至尝试了 Trim() 函数,但没有任何效果。

我发现 java 的这个主题有点相似,但对 powershell 没有太大帮助: Why .equals method is failing on two same value objects?

-eq 类似于 == 运算符,它将比较对象的地址而不是值。您必须使用 Array 或其他收集实用程序来比较两个对象。

您正在尝试比较两个数组。相等运算符 -eq 工作得很好,但它会在您寻找 value 比较时进行 reference 比较,即执行两个数组的内容匹配?最简单的方法是使用 Compare-Object,其中 returns 是两个数组之间的差异数组。如果没有差异,那么它 returns $null。所以你只需要检查结果的长度来检查值是否相等:

$arraysMatch = @(Compare-Object $first_result $second_result).Length -eq 0

请注意,Compare-Object 默认情况下以与顺序无关的方式比较其参数,因此 1,3,2 将匹配 1,2,3。如果您想比较它们并考虑顺序,请添加 SyncWindow 参数:

$arraysMatch = @(Compare-Object $first_result $second_result -SyncWindow 0).Length -eq 0