PSv3 + синтаксис (?
- это встроенный псевдоним для Where-Object
командлета):
(Compare-Object $NewFiles $OldFiles | ? SideIndicator -eq '=>').Count -eq 0
Более эффективная альтернатива PSv4 + с использованием метода Where()
(как предложил сам Брайан (ОП)):
(Compare-Object $NewFiles $OldFiles).Where-Object({ $_.SideIndicator -eq '=>' }).Count -eq 0
По умолчанию Compare-Object
возвращает только различия между двумя наборами и объектами вывода, свойство которых .SideIndicator
указывает набор, для которого элемент уникален:
Поскольку строковое значение =>
указывает на элемент, который является уникальным для 2-го набора (RHS), мы можем отфильтровать различия до элементов, уникальных для 2-го набора, поэтому, если их число равно 0, подразумевается, что есть нет элементов уникальных для 2-го набора.
Примечание:
Как определяется «сходство» (равенство), зависит от типа данных элементов.
Подводный камень в том, что экземпляры ссылочных типов сравниваются по их значениям .ToString()
, что может привести к тому, что разнородные объекты будут считаться равными. Например, Compare-Object @{ one=1 } @{ two=2 }
производит no output.