Первый пост в stackoverflow, поэтому заранее извиняюсь, если я пропущу социальную норму.
У меня есть массив в PowerShell, который содержит тысячи объектов. Стандартные вещи с каждым объектом, имеющим такие свойства, как имя пользователя, время входа в систему, компьютер, на который они вошли, и т. д. Затем я отделил небольшое количество объектов от первого массива с пользователями, чье имя начинается с A:
$Array2 = $Array1 | where-object Username -like '*\a*'
Это работает, как и ожидалось.
Я хочу построить третий массив, содержащий только объекты из массива $Array1, которых нет в массиве $Array2. Или, другими словами, массив только с пользователями, имена которых не начинаются с буквы A. Похоже, это путь:
$Array3 = compare-object $Array1 $Array2 | select-object -expandproperty InputObject
Ожидание:
$Array3 | where-object Username -like '*\a*'
ничего не возвращается
То, что я получаю, хотя много результатов. Как ни странно, если я посмотрю на .count каждого массива, математика получится. Массив1 минус Массив2 равно Массив3. Таким образом, он удаляет правильное количество объектов, а не ожидаемые объекты. Что я здесь делаю неправильно? Поскольку я делаю выборку из точного массива, с которым я сравниваю, я не могу придумать никаких других критериев, по которым он будет искать, которые вернут неожиданное совпадение. Я также пытался отсортировать каждый массив по одному и тому же свойству перед сравнением, потому что я схватывал, но, как и ожидалось, это не помогло.
Заранее спасибо!
$Array2 = Array1 | where-object Username -like '*\a*'
. Я попробовал это с помощью get-aduser, но со свойством name, и у меня это работает. У меня нет свойства имени пользователя или имен с обратной косой чертой. Если вы не назначите $array3, правильно ли будет выглядеть вывод объекта сравнения? - person js2010   schedule 24.04.2020dom/joe/abel
Compare-object просматривает строковую версию объекта aduser или DistinguishedName. Он не смотрит на свойство имени пользователя. - person js2010   schedule 24.04.2020