ここにこのコマンドレットがあります。
Get-ADUser -filter {(distinguishedName -notlike "Disabled Users") -and (enabled -eq $false)} -searchBase "ou=FirstOU,dc=domain,dc=com"
「無効なユーザー」OUにない無効なユーザーを見つけるために作成しました。 (OU内のOU)
しかし、何らかの理由で、「無効ユーザー」に含まれていない無効ユーザーだけでなく、「無効ユーザー」に含まれている無効ユーザーも返します。
なぜ(distinguishedName -notlike "Disabled Users")
仕事?
私の構造を明確にするために:
Forest
FirstOU
users,groups,etc..
Disabled Users OU
.
.
.
DN属性はLDAPクエリでのワイルドカードマッチングをサポートしていない (および-like
/-notlike
はワイルドカードなしでは役に立ちません)。
無効になっているすべてのユーザーを取得し、結果から不要なアカウントを除外するだけです。
$Disabled = Get-ADUser -Filter { useraccountcontrol -bor 2 } -SearchBase "ou=FirstOU,dc=domain,dc=com"
$Filtered = $AllDisabledUsers |Where-Object {$_.distinguishedName -notmatch "OU=Disabled Users"}
{ useraccountcontrol -bor 2 }
は、無効なアカウントの「純粋な」LDAPフィルターと同等です。(&(useraccountcontrol:1.2.840.113556.1.4.803:=2))
フィルタは、取得しようとしているオブジェクトのタイプ(この場合はUserオブジェクト)に作用します。したがって、クエリは、dnが「無効なユーザー」ではない無効なユーザーを返します。 OUではなくUserオブジェクトにフィルターを適用しています。
はい、もちろん... BigHomieが正しく指摘したように、ユーザーdnには「DisabledUsers」という文字列が含まれます。本当の問題は、ユーザーdnが正確に「無効なユーザー」ではないため、ワイルドカード文字がないことでした。
代わりにこれを試してください:
Get-ADUser -Filter {(Enabled -eq $false)} | ? { ($_.distinguishedname -notlike '*Disabled Users*') }
ブラケットとワイルドカード。試してみてください
PS C:\Users\BigHomie> Get-ADUser -SearchBase "OU=Users,dc=eng,dc=mit,dc=edu" -SearchScope Subtree -Filter {distinguishedname -notlike "*Disabled*"}
適切な構文が見つかりました ここ