none
[ADSISearcher] 型アクセラレーターで指定のOU配下の全ユーザを検索する書き方について RRS feed

  • 質問

  • 下記の処理を[ADSISearcher] 型アクセラレーターを用いて簡単に書き直したいのですが、どのように記述すればよいでしょうか?

    (書き直したい処理)

    $as= New-Object DirectoryServices.DirectorySearcher
    $as.searchroot=[adsi]"LDAP://OU=mobile,DC=hoge,DC=co,DC=jp"
    $as.findall()|select path

    (書き直した後のイメージ)エラーになります。

    ([ADSISearcher] [adsi]"LDAP://OU=mobile,DC=hoge,DC=co,DC=jp").FindAll() | Select Path

    また上記含め、[ADSISearcher] 型アクセラレーターの解説、ヘルプ等があれば参照方法を教えてください。

    get-help adsisearcherではエラーになりました。。また、Hey, Scripting Guys!の以下の記事は参照しました。

    Script Center > リポジトリ > Active Directory > Windows PowerShell から Active Directory を検索する方法はありますか

    2013年4月20日 11:59

回答

  • [ADSISearcher]型アクセラレータでSearchRootを指定する方法は私の知る限りではありません。
    ただし、[ADSISearcher]型アクセラレータで生成するオブジェクトもDirectorySearcherオブジェクトであることに違いはないので、以下のように記述することはできます。(簡単になったかといわれると微妙ですが…)

    $as=[ADSISearcher]"ObjectClass=user"
    $as.SearchRoot="LDAP://ou=mobile,dc=hoge,dc=co,dc=jp"
    $as.FindAll()|select path

    なお、(書き直したい処理)の例だとOU自体のオブジェクトも取得してしまうと思うので、検索フィルター文字列には"ObjectClass=user"を指定して、ユーザーオブジェクトのみ取得するようにしています。
    LDAP検索フィルター構文はRFCで規定されているもので、ADSISearcherに限ったものではありませんので、資料は探せば色々あるかと思います。

    ちなみにWindows Server 2008 R2や2012に同梱のActiveDirectoryモジュールを使えるならば、

    Get-ADUser -Filter * -SearchBase "ou=mobile,dc=hoge,dc=co,dc=jp"|select DistinguishedName

    のように簡潔に記述できます。

    2013年4月20日 15:00
    モデレータ