为什么以下两个命令,只有-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运行等效项,它将按预期工作。
答案 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