我在powershell中尝试了这些命令:
$a1=(Get-Service)
$a2=(Get-Service)
$a1[0] -eq $a2[0]
令我惊讶的是,结果是假的。然后我仔细检查了他们的价值,发现他们是同一个服务。
属于同一服务的两个对象怎么可能彼此不相同?
powershell中的对象相等标准是什么?
我发现部分原因是因为System.ServiceProcess.ServiceController对象中的Equals方法返回false。
但是系统如何比较它是我现在不理解的。
答案 0 :(得分:2)
它们不是同一个对象。它们可能包含相同的数据或值,但它们与ServiceController
对象的实例不同。
举例来说,如下:
$obj = new-object pscustomobject -Property @{123=456}
$obj2 = new-object pscustomobject -Property @{123=456}
您是否希望这些是相同的对象?即使它们包含相同的数据,它们也是两个独立的实例,因此$obj1 -eq $obj2
将始终返回$false
同样地,使用.NET System.Object
中的equals()
方法,从中继承所有内容:
> $obj.equals($obj2)
False
答案 1 :(得分:0)
我找到了原因。这是因为System.ServiceProcess.ServiceController的Equals方法返回false值。