Я попробовал эти команды в PowerShell:
$a1 = (Get-Service)
$a2 = (Get-Service)
$a1[0] -eq $a2[0]
К моему удивлению, результат ложный. Затем я дважды проверил их стоимость и обнаружил, что они одинаковые услуги.
Как два объекта, принадлежащих к одному и тому же сервису, не равны друг другу?
Каков стандарт равенства объектов в PowerShell?
Я обнаружил, что причина в том, что метод Equals в System.ServiceProcess.ServiceController Object возвращает false.
Но как система сравнивается? Это то, что я сейчас не понимаю.
Это не тот же объект. Они могут содержать одни и те же данные или значения, но это разные экземпляры объекта ServiceController
.
Возьмем, например, следующее:
$obj = new-object pscustomobject -Property @{123=456}
$obj2 = new-object pscustomobject -Property @{123=456}
Вы ожидаете, что они будут одним и тем же объектом? Хотя они содержат одни и те же данные, это два отдельных экземпляра, поэтому $obj1 -eq $obj2
всегда будет возвращать $false
Аналогично, используя метод equals()
из.NETs System.Object
, из которого все наследует:
> $obj.equals($obj2)
False
Я нашел часть причины. Это связано с тем, что метод Equals
в System.ServiceProcess.ServiceController возвращает ложное значение.