雑記+備忘録

OS中心の技術情報と趣味について(最近は主に将棋)。備忘録なのでここに書かれたことを試すのは自己責任でお願いします。

PowerShellでADのオブジェクト検索(メンバサーバーから)

ドメインコントローラーから検索する場合は「Get-ADUser」や「Get-ADComputer」を使えばよいのですが、 DCを触れない、AD管理PowerShellもインストールできない場合かつ単純に「ユーザーが存在するかだけ知りたい」 といったシチュエーションで、手軽にユーザーと存在するOUを表示させます。

参考URL、というか今回の記事はここをまとめただけ https://gallery.technet.microsoft.com/scriptcenter/767d313c-645c-4c62-b021-3772091a8c61

◇ ユーザー一覧を表示

PS > ([ADSISearcher]"ObjectCategory=user").FindAll() | Select Path

こんな感じで出力されます。

LDAP://CN=Administrator,CN=Users,DC=hoge,DC=local
LDAP://CN=Guest,CN=Users,DC=hoge,DC=local
LDAP://CN=krbtgt,CN=Users,DC=hoge,DC=local
LDAP://CN=testUser,OU=TestOU,DC=hoge,DC=local

"ObjectCategory=user" を"ObjectClass=user"にすると、コンピューターオブジェクトも出力されます。 純粋にコンピューターオブジェクトだけを出力する場合は、次項のコマンドです。

◇ コンピューターオブジェクト一覧を表示(ABC順でソートもしてみます)

PS > ([ADSISearcher]"ObjectClass=Computer").FindAll() | Select Path | sort Path

ダブルクォートで囲まれているところは検索のフィルターを記述できます。(詳しくは参考URL) 名前に「test」を含むユーザーで検索してみます。

PS > ([ADSISearcher]"(&(ObjectCategory=user)(Name=*test*))").FindAll() | Select Path

もう一つ、上記は「[ADSISercher]型アクセラレーター」というのを使っています。 それを使わずにオブジェクトを作成する場合は、このようになります。 (出力内容、形式は同じです)

$hoge = New-Object DirectoryServices.DirectorySearcher
$hoge.Filter = "(&(ObjectCategory=user)(Name=*test*))"
$hoge.FindAll() | Select Path

1行で書くこともできます。

(New-Object DirectoryServices.DirectorySearcher "(&(ObjectCategory=user)(Name=*test*))").FindAll() | Select Path

どーでもいい情報ですが、参考URLの「Scripting Guy」は冒頭と末尾にちょっとひねった挨拶を入れるので、 なかなか面白いです。