-eq和-ne给我相同的结果

时间:2012-11-27 21:19:40

标签: powershell active-directory powershell-v2.0 domaincontroller

为什么以下两个命令,只有-eq和-ne运算符的区别给我我的DC列表?

Get-ADComputer -Filter {(operatingsystem -like "*server*") -AND 
(PrimaryGroup -eq "CN=Domain Controllers,CN=Users,DC=domain,DC=com") } 
-Property Name,PrimaryGroup

我希望这个拥有一切,但是域控制器。

Get-ADComputer -Filter {(operatingsystem -like "*server*") -AND 
(PrimaryGroup -ne "CN=Domain Controllers,CN=Users,DC=domain,DC=com") } 
-Property Name,PrimaryGroup

如果我针对PrimaryGroupID而不是PrimaryGroup运行等效项,它将按预期工作。

2 个答案:

答案 0 :(得分:1)

我在尝试这两个命令时实际上遇到了错误。有点挖掘和过滤器造成了问题。在服务器对象上快速查看ADSIEdit。它似乎没有名为“PrimaryGroup”的属性。

这是在2008 R2 R2中运行的2008 R2林和域功能级别。

顺便说一句,如果你想在一个域中获得DC列表,那么get-ADDomainController就可以完成这项工作。

问候 Arcass

答案 1 :(得分:0)

如果要将一个语句放在单独的行上,则需要在行的末尾添加反引号(`),以告知PowerShell该语句在下一行继续。但是,即使那样,您也无法将过滤器分为两行。所以它应该看起来像这样:

Get-ADComputer -Filter {(operatingsystem -like "*server*") -AND (PrimaryGroup -eq "CN=Domain Controllers,CN=Users,DC=example,DC=com") } `
    -Property Name,PrimaryGroup

您已经发现,AD实际上没有名为PrimaryGroup的属性。这是PowerShell公开给您的属性,可以为您解释primaryGroupId属性中的值。

任何对象的primaryGroupId属性都具有该组的相对标识符(RID)。 RID是SID中数字的最后一部分,但组也将此值存储在其primaryGroupToken属性中。因此,您可以像这样获得此值:

$primaryGroupToken = (Get-ADGroup "Domain Controllers" -Properties primaryGroupToken).primaryGroupToken

PowerShell必须将传递给-Filter参数的内容转换为正确的LDAP查询,因此,当您在过滤器中使用PrimaryGroup时,PowerShell会为您执行此操作。

但是,在这种情况下,实际上并不需要这样做,因为Domain Controllers group是一个内置组,并且始终具有516的RID。因此,您可以按照以下方式做您想做的事情:

Get-ADComputer -Filter "operatingsystem -like '*server*' -AND PrimaryGroupId -eq 516" `
    -Property Name,PrimaryGroup