powershell中的对象相等标准是什么,以及ServiceController如何定义Equals方法

时间:2015-04-07 11:04:31

标签: c# powershell powershell-v3.0

我在powershell中尝试了这些命令:

$a1=(Get-Service)
$a2=(Get-Service)
$a1[0] -eq $a2[0]

令我惊讶的是,结果是假的。然后我仔细检查了他们的价值,发现他们是同一个服务。

属于同一服务的两个对象怎么可能彼此不相同?

powershell中的对象相等标准是什么?

我发现部分原因是因为System.ServiceProcess.ServiceController对象中的Equals方法返回false。

但是系统如何比较它是我现在不理解的。

2 个答案:

答案 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值。