PowerShell 比较运算符抛出错误值

标签 powershell boolean

> $a1

Hash
----
9045345C8B84BFC1271FACC4CAE8A145263028C2ECD6F558BEAE841DD3BD116


> $a2

Hash
----
9045345C8B84BFC1271FACC4CAE8A145263028C2ECD6F558BEAE841DD3BD116


> $a1 -eq $a2
False

当Hash属性明显相同时,为什么会给出false? 使用 -like 可以,但是,我不知道是否推荐使用 -eq

最佳答案

当您执行 $a1 -eq $a2 时,您要比较的是具有名为 Hash 属性的 2 个对象,您要做的是比较两个对象上的 Hash 属性的,您可以使用成员访问运算符 . 扩展这些属性的值。请参阅about Properties .

$a1 = [pscustomobject]@{
    Hash = '9045345C8B84BFC1271FACC4CAE8A145263028C2ECD6F558BEAE841DD3BD116'
}
$a2 = [pscustomobject]@{
    Hash = '9045345C8B84BFC1271FACC4CAE8A145263028C2ECD6F558BEAE841DD3BD116'
}

$a1.Hash -eq $a2.Hash # True

PSObject没有实现IEquatable因此,当测试这两个对象是否相等时,默认值为 Object.ReferenceEquals(Object, Object)这些对象具有不同的引用,因此 $false

为什么-like返回$true

本质上,操作的右侧(本例中为 $a2)作为 pattern 参数传递给 WildcardPattern API将对象强制转换为字符串:

@{Hash=9045345C8B84BFC1271FACC4CAE8A145263028C2ECD6F558BEAE841DD3BD116}

然后将其与 $a1 进行比较,当两者都强制转换为字符串时,它们看起来完全相同。

$pattern = [WildcardPattern]::new(
    [string] $a2,
    [System.Management.Automation.WildcardOptions] 'CultureInvariant, IgnoreCase')

$pattern.IsMatch($a1) # True

关于PowerShell 比较运算符抛出错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76176483/

相关文章:

powershell - Windows 7 PowerShell复制项(如果较大)

java - boolean 值在 RecyclerView 中单击按钮时不起作用

c++ - 使用 LASlib 时重新定义 BOOL typedef

加载时 Powershell ISE 崩溃

Powershell cat 命令 - 为什么输出文件大小远大于输入文件大小的总和?

ios - Objective-C 中的 BOOL 循环

objective-c - Objective C boolean 值

c - 米斯拉违规 12.6

regex - PowerShell删除下一行的正则表达式字符串

powershell - 在 powershell 脚本中管理来自外部命令的输入