0

次の2つのコマンドが、-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

PrimaryGroupの代わりにPrimaryGroupIDに対して同等のものを実行すると、期待どおりに機能します。

4

2 に答える 2

1

両方のコマンドを試してみると、実際にはエラーが発生します。少し掘り下げたところ、フィルターが問題を引き起こしていました。ADSIEditでサーバーオブジェクトをざっと見てみました。「PrimaryGroup」という属性がないようです。

これは、2008R2フォレストおよびドメインの機能レベルで実行されている2008R2ADにありました。

余談ですが、ドメイン内のDCのリストが必要な場合は、get-ADDomainControllerがその役割を果たします。

アーカスに関して

于 2012-11-27T22:15:26.703 に答える
0

1 つのステートメントを別の行に配置する場合は、行の末尾にバッククォート (`) を配置して、ステートメントが次の行に続くことを PowerShell に伝える必要があります。ただし、その場合でも、フィルターを 2 つの異なる行に分割することはできません。したがって、次のようになります。

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 の number の最後のセクションですが、グループはこの値をそのprimaryGroupToken属性にも格納します。したがって、次のようにこの値を取得できます。

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

PowerShell は、パラメーターに渡されたものを-Filter適切な LDAP クエリに変換する必要があるためPrimaryGroup、フィルターで使用すると、PowerShell がそれを実行します。

ただし、ドメイン コントローラ グループは組み込みグループであり、常に RID が516. したがって、次のようにしようとしていることを実行できます。

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