两者之间的主要区别在于,第一个命令不涉及直接比较值以获得所有结果,而第二个命令则涉及。第一个命令包含NULL结果,第二个命令不包含NULL结果(因为已经发现MDMarra)。这两个命令都以以下cmdlet开头:
get-aduser
进行下面的操作时,请记住,此cmdlet的结果包括所有AD用户,无论其-filter
后面的参数中有任何其他内容。
现在,让我们分解两个不同的部分。第一个:
{-not (description -eq "auto")}
...手段
- “找出描述属性等于文本字符串“ auto”的位置。要进行此比较,需要在描述字段中存在一个字符串,
-eq
操作员才能将其与“ auto”进行比较。从中删除NULL值比较,因为它无法将NULL与字符串值进行比较。
- 独立于
-eq
filter参数为我提供的不是的所有结果(description -eq "auto")
,它将包含NULL,因为原始cmdlet get-aduser
包括所有AD用户。它不需要与-not
操作员进行任何其他比较。除了(description -eq "auto")
过滤器的结果之外,它还为您提供了所有其他功能。
在您的示例中,假设您有1个AD用户,其描述等于“ auto”,几百个带有“ auto”以外的内容,另外几百个带有NULL描述。逐步执行命令逻辑将执行以下操作:
- 给我所有描述等于“自动”的AD用户(get-aduser)-结果为1个用户
- 给我所有不是您刚刚给我的AD用户-结果是几百个带有其他内容,还有几百个带有NULL。
由于不必使用-not
运算符将任何内容与其他任何内容进行比较,因此结果包括原始get-aduser
cmdlet 中捕获的NULL描述用户。
第二条命令:
{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),它们使用正则表达式查找模式;替换运算符(-replace),它使用正则表达式更改输入值;像运算符(-like,-notlike),使用通配符(*)查找模式;以及包含运算符(位于-notin,-contains,-notcontains中),它们确定测试值是否出现在参考集中。
它们还包括按位运算符(-bAND,-bOR,-bXOR,-bNOT)来操纵值中的位模式。
有关更多信息,请参见about_Comparison_Operators
逻辑运算符
使用逻辑运算符(-和,-或-xor,-not 、!)将条件语句连接到单个复杂的条件语句中。例如,您可以使用逻辑-和运算符创建具有两个不同条件的对象过滤器。
有关更多信息,请参见about_Logical_Operators。