0

为什么以下两个命令,唯一的区别是 -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 运行等效项,它会按预期工作。

4

2 回答 2

1

I actually get an error when trying both commands. Did a little digging and the filter was causing the problem. Had a quick look in ADSIEdit at a server object. It doesn't appear to have a attribute called "PrimaryGroup".

This was in a 2008 R2 AD running in 2008 R2 forest and domain functional levels.

As an aside, if you want a list of DC in a domain get-ADDomainController will do the job.

regards Arcass

于 2012-11-27T22:15:26.703 回答
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 组是一个内置组,并且始终具有516. 所以你可以像这样做你想做的事情:

Get-ADComputer -Filter "operatingsystem -like '*server*' -AND PrimaryGroupId -eq 516" `
    -Property Name,PrimaryGroup
于 2020-05-29T18:16:59.050 回答