web-dev-qa-db-ja.com

特定のOUに含まれていない無効なユーザーを検出する必要があるPowerShellスクリプトは、そのOUからもユーザーを出力します

ここにこのコマンドレットがあります。

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
.
.
.
3
Npv23g

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))

2

フィルタは、取得しようとしているオブジェクトのタイプ(この場合はUserオブジェクト)に作用します。したがって、クエリは、dnが「無効なユーザー」ではない無効なユーザーを返します。 OUではなくUserオブジェクトにフィルターを適用しています。

はい、もちろん... BigHomieが正しく指摘したように、ユーザーdnには「DisabledUsers」という文字列が含まれます。本当の問題は、ユーザーdnが正確に「無効なユーザー」ではないため、ワイルドカード文字がないことでした。

代わりにこれを試してください:

Get-ADUser -Filter  {(Enabled -eq $false)} | ? { ($_.distinguishedname -notlike '*Disabled Users*') }
2
squillman

ブラケットとワイルドカード。試してみてください

PS C:\Users\BigHomie> Get-ADUser -SearchBase "OU=Users,dc=eng,dc=mit,dc=edu" -SearchScope Subtree -Filter {distinguishedname -notlike "*Disabled*"}

適切な構文が見つかりました ここ

2
MDMoore313