Основное различие между ними заключается в том, что первая команда не предполагает прямого сравнения значений, чтобы получить все результаты, а вторая команда это делает. Первая команда содержит результаты NULL, а вторая - нет (как MDMarra уже обнаружила). Обе команды начинаются с этого командлета:
get-aduser
При просмотре ниже помните, что в результаты этого командлета включены все пользователи AD, независимо от того, что указано в -filterпараметре после него.
Теперь давайте разберем две разные части. Первый:
{-not (description -eq "auto")}
...средства
- "выяснить, где атрибут description равен текстовой строке" auto ". Чтобы это сравнение работало, в поле описания должна существовать строка, чтобы
-eqоператор мог сравнить ее с" auto ". Значения NULL удаляются из этого сравнение, так как он не может сравнивать NULL со строковым значением.
- независимо от
-eqПараметр фильтра дает мне ВСЕ, что НЕ является результатом (description -eq "auto"), который будет содержать значения NULL, поскольку исходный командлет get-aduserвключает в себя всех пользователей AD. Не нужно было сравнивать что-либо еще с -notоператором. Он просто дал вам все, кроме результатов (description -eq "auto")фильтра.
В вашем примере предположим, что у вас есть 1 пользователь AD, чье описание равно «auto», несколько сотен с чем-то отличным от «auto» и несколько сотен с NULL-описаниями. Пошаговая логика команд:
- Дайте мне всех пользователей AD (get-aduser), где описание равно "auto" - в результате 1 пользователь
- Дайте мне всех пользователей AD, которые НЕ являются тем, что вы только что дали мне - результат - несколько сотен с чем-то другим И несколько сотен, которые имеют NULL.
Поскольку с помощью -notоператора не нужно было сравнивать что-либо с чем-либо еще , в результате было получено описание пользователей NULL, которое было зафиксировано в исходном get-aduserкомандлете.
Вторая команда:
{description -ne "auto"}
...средства
- "выяснить, где атрибут description не равен точной строке" auto ". Опять же, чтобы это сравнение работало, в поле описания должна существовать строка, чтобы
-neоператор мог сравнить ее с" auto ". Значения NULL удаляются из этого сравнения, поскольку он не может сравнить NULL со строковым значением.
В вашем примере снова предположим, что у вас есть 1 пользователь AD, чье описание равно «auto», несколько сотен с чем-то отличным от «auto» и несколько сотен с NULL-описаниями. Пошаговая логика команд:
- Дайте мне всех пользователей AD, где описание не равно "auto" - в результате получится несколько сотен пользователей с чем-то отличным от "auto" в их описании. Он не тянет пользователей с описаниями NULL, потому что он не может сравнивать NULL с текстовой строкой.
В любом случае вся разница между двумя командами определенно не интуитивна.
Используя эту команду, вы также сможете перехватывать значения NULL с "-and", например так:
{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), которые находят шаблоны с помощью регулярных выражений; оператор замены (-replace), который использует регулярные выражения для изменения входных значений; операторы like (-like, -notlike), которые находят шаблоны с использованием подстановочных знаков (*); и операторы содержания (in, -notin, -contains, -notcontains), которые определяют, появится ли тестовое значение в наборе ссылок.
Они также включают побитовые операторы (-bAND, -bOR, -bXOR, -bNOT) для управления битовыми комбинациями в значениях.
Для получения дополнительной информации см. About_Comparison_Operators
Логические Операторы
Используйте логические операторы (-and, -or, -xor, -not,!), Чтобы соединить условные операторы в один сложный условный оператор . Например, вы можете использовать логический оператор -and для создания фильтра объекта с двумя различными условиями.
Для получения дополнительной информации см. About_Logical_Operators.