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」は冒頭と末尾にちょっとひねった挨拶を入れるので、 なかなか面白いです。