Powershell. Сравнение двух массивов Compare-Object

Очень полезным навыком является сравнение двух массивов.
На первый взгляд эта базовая задача в Powershell может сбить с толку.
Но давайте разберём ее нюансы и некоторые примеры, и все станет на свои места.
При сравнении двух массивов использование привычных операторов сравнения типа -eq и -like  не приведет к желаемому результату.
Использования операторов —in и —contains возвращает только вхождение одного объекта, что опять не соответствует нашей цели.

Compare-Object

Для такой задачи хорошо подойдет командлет Compare-Object

Указатель => говорит о том, что во втором массиве есть значения, которых нет с первом, а маркер «<=» будет указывать на объекты отсутствующие во втором массиве:

Обязательным условием будет одинаковый тип сравниваемых данных:

Не удивляйтесь тому, что не получаете ожидаемый результат, сравнивая объект типа ADUser с объектом типа string.
ADUser — это массив, у которого обычно первой строкой стоит DistinguishedName, и если у вас в объект string случайно не записан именно DistinguishedName, то сравнение не будет выполнено должным образом.

Так же стоит помнить о том, что если оба массива идентичны, то Compare-Object не вернет совершенно ничего. Что бы убедиться что это не ошибка, и вывести на экран в том числе и совпадающие значения, используйте параметр -IncludeEqual

Можно использовать фильтр, чтобы получить только отсутствующие объекты в одном из массивов:

Сравнение идентичных массивов

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *