Ключова різниця між ними - перша команда не передбачає прямого порівняння значень для отримання всіх результатів, а друга команда робить. Перша команда включає результати NULL, а друга - ні (як MDMarra вже виявив). Обидві команди починаються з цього командлету:
get-aduser
Переглядаючи наведене нижче, пам’ятайте, що результати цього командлету включають усіх користувачів AD незалежно від будь-якого іншого в -filter
параметрі після нього.
Тепер давайте розбимо дві різні частини. Перший:
{-not (description -eq "auto")}
...засоби
- "з'ясуйте, де атрибут опису дорівнює текстовому рядку" auto ". Щоб це порівняння працювало, у полі опису повинен існувати рядок, щоб
-eq
оператор міг порівнювати його з" auto ". З цього значення випадають значення NULL порівняння, оскільки він не може порівняти NULL зі значенням рядка.
- незалежно від
-eq
Параметр фільтра дав мені ВСЕ, що НЕ є результатом (description -eq "auto")
, який буде включати NULL, тому що оригінальний командлет get-aduser
включає всіх користувачів AD. Не потрібно було нічого порівнювати з -not
оператором. Це просто дало вам усе, крім того, які були результати (description -eq "auto")
фільтра.
У вашому прикладі, припустимо, у вас є користувач AD AD, який має їх опис, рівний "auto", кілька сотень із чимось іншим, ніж "auto" та кілька сотень з NULL описами. Перейшовши через логіку команди, вона виконає:
- Дайте мені всіх користувачів AD (get-aduser), де опис дорівнює "auto" - приводить до 1 користувача
- Дайте мені всіх користувачів AD, які НЕ є тим, що ви мені щойно подарували - результат - це кілька сотень із чимось іншим І кілька сотень, які мають НУЛЛ.
Оскільки йому не довелося нічого порівнювати з будь-яким іншим, використовуючи -not
оператор, результат включав користувачів опису NULL, які були захоплені в оригінальному get-aduser
командлеті.
Друга команда:
{description -ne "auto"}
...засоби
- "з'ясуйте, де атрибут опису не дорівнює точному рядку" auto ". Знову ж таки, щоб це порівняння працювало, в полі опису повинен існувати рядок, щоб
-ne
оператор міг порівнювати його з" auto ". Значення NULL випадають із цього порівняння, оскільки він не може порівняти NULL зі значенням рядка.
У вашому прикладі ще раз припустимо, що у вас є користувач 1 AD, який має їх опис, рівний "auto", кілька сотень із чимось іншим, ніж "auto" і кілька сотень з NULL описами. Перейшовши через логіку команди, вона виконає:
- Дайте мені всім користувачам AD, де опис не дорівнює "авто" - це призводить до декількох сотень користувачів із чимось відмінним від "авто" в їх описі. Він не тягне користувачів з описами NULL, оскільки він не може порівнювати NULL з текстовим рядком.
У будь-якому випадку вся різниця між двома командами, безумовно, не інтуїтивно зрозуміла.
Використовуючи цю команду, ви повинні мати змогу ловити NULL з "-і" там теж так:
{description -ne "auto" -and description -ne $NULL}
Я не на 100% у синтаксисі, оскільки зараз не можу перевірити його, і, мабуть, є кращий спосіб зробити це, ніж це теж. Коли все розбито, це досить антикліматично, і для пояснення знадобилося багато тексту, але я натрапив на такі дивні речі, як це, перш ніж використовувати різні оператори, і багато проб і помилок, оскільки я ніколи не пам'ятаю всіх застережень які йдуть разом із використанням кожного.
Довідка: http://technet.microsoft.com/en-us/library/hh847732.aspx :
Оператори порівняння
Використовуйте оператори порівняння (-eq, -ne, -gt, -lt, -le, -ge) для порівняння значень та умов тестування. Наприклад, ви можете порівняти два значення рядка, щоб визначити, чи однакові вони.
Оператори порівняння включають оператори відповідності (-match, -notmatch), які знаходять шаблони, використовуючи регулярні вирази; оператор заміни (-замінити), який використовує регулярні вирази для зміни вхідних значень; подібні оператори (-like, -notlike), які знаходять шаблони, використовуючи символи підстановки (*); і оператори стримування (in, -notin, -contains, -notcontains), які визначають, чи є тестове значення в контрольному наборі.
Вони також включають бітові оператори (-bAND, -bOR, -bXOR, -bNOT) для маніпулювання бітовими шаблонами у значеннях.
Докладнішу інформацію див. У розділі about_Comppare_Operators
Логічні оператори
Використовуйте логічні оператори (-and, -or, -xor, -not,!) Для з'єднання умовних операторів у єдиний складний умовний . Наприклад, ви можете використовувати логічний оператор-оператор для створення об'єктного фільтра з двома різними умовами.
Для отримання додаткової інформації див. Про_Логічні_Оператори.