none
Active Directory のユーザー オブジェクトの属性の厳密な取得方法 RRS feed

  • שאלה

  • ユーザーオブジェクトの属性情報を取得したいです。
    取得方法はいろんなサイトで見つかりますが、Windows Server 2008 R2 以降から [Active Directory ユーザーとコンピューター] で閲覧できている内容が、プログラムで取得すると情報が欠落します。
    VBscript, PowerShell, ldp.exe どれも同じ挙動です。
    動作を見ているとグローバルカタログの情報のみから取得していて、オリジナルデータから情報を得ていないようです。
    どのようにしたら取り出せるでしょうか?

    動作環境は以下の通りです。
    ユーザー数:8000
    DC:4台(すべてGC,DNS)
    OS:Windows Server 2008 R2, Windows Server 2016 混在
    機能レベル:Windows Server 2018 R2
    repadmin, dcdiag では問題は見つかりませんでした。
    יום רביעי 10 יולי 2019 07:07

תשובות

  • チャブーンです。

    まあよくわからないのですが、ひとまずいくつかのパラメータを決め打ちして、絞り込んでみてはどうでしょうか?たとえば、以下のように。

    # アクセスするユーザー権限を決めます。ビルトインドメインAdministratorを指定してください
    $Cred=Get-Credential
    
    # このケースではLDAPFilterやFilterは不要です。Get-ADUser内で最初から最小条件でフィルターされているからです。ユーザー権限やサーバー先を指定します。
    Get-ADUser -Filter * -Properties @("scriptPath") -Credential $Cred -Sever <ドメインコントローラーのFQDN> | Select distinguishedName, scriptPath

    うえでよい結果が出ない、気に入らないということなら、Get-ADUserはあきらめ、Get-ADObjectを直接指定すればいいと思います。直るかどうかはわからないですが。

    # アクセスするユーザー権限を決めます。ビルトインドメインAdministratorを指定してください
    $Cred=Get-Credential
    
    # ユーザー権限やサーバー先を指定します。
    Get-ADObject -LDAPFilter '(&(objectClass=user)(!objectClass=computer))' -Properties @("scriptPath") -Credential $Cred -Sever <ドメインコントローラーのFQDN> | Select distinguishedName, scriptPath


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。

    • סומן כתשובה על-ידי upken יום שישי 12 יולי 2019 03:42
    יום שישי 12 יולי 2019 02:41
    מנחה דיון

כל התגובות

  • Powershellコマンド「get-aduser -filter {objectClass -eq "user"} -properties *」とやっても拾えない情報でしょうか?

    具体的に取得したい情報はどれになりますでしょうか?

    יום רביעי 10 יולי 2019 07:39
  • チャブーンです。

    この件ですが、「グローバルカタログから情報を採っていておかしい」ということですが、その根拠は何になりますか?したのページにある通り、WindowsでLDAP接続する際に使うADSIですが、ふつうはグローバルカタログにつながらず、明示指定する必要があります。逆に特定ドメインコントローラーに接続するようにコードを書いてみたらいいのではないでしょうか?

    http://www.selfadsi.org/bind.htm


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。

    יום רביעי 10 יולי 2019 09:43
    מנחה דיון
  • 拾えません。取得したいデータは複数ありますが、とりあえずは scriptPath です。

    Get-ADUser の場合は、-Properties に指定した属性名が誤っている場合はエラーとなりますので指定は正しいと思っています。


    • נערך על-ידי upken יום חמישי 11 יולי 2019 05:00
    יום חמישי 11 יולי 2019 02:51
  • > ふつうはグローバルカタログにつながらず、明示指定する必要があります。

    おっしゃる通りですが、実際には、属性が得られるオブジェクトと得られないオブジェクトがあり、どちらもスナップインからは違いがみられません。

    また、属性が得られないユーザーオブジェクトであってもログイン後に情報が得られるようになることがあります。

    追加情報です。

    Linux の OpenLDAP の ldapsearch で LDAP 簡易バインドで接続した場合は、正常に取得できました。どのDCに接続しても正常です。

    • נערך על-ידי upken יום חמישי 11 יולי 2019 04:41
    יום חמישי 11 יולי 2019 02:53
  • チャブーンです。

    なるほど。そうですか。こちらはコミュニティの一般市井のエンジニアでMSの中の人ではありません。つまり、内部仕様については語れませんので、まずは実際にお試しになった「PowerShellのコード」を見せていただけませんか?


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。

    יום חמישי 11 יולי 2019 05:19
    מנחה דיון
  • Powershellコマンド「get-aduser -filter {objectClass -eq "user"} -properties * | select Name,ScriptPath」とやるとどうでしょうか?

    私の仮想環境でテストした際には、scriptPathが設定されていれば拾えたのですが、どうでしょうか?

    יום חמישי 11 יולי 2019 21:03
  • 同様です。情報が得られるユーザーオブジェクトと得られないユーザーオブジェクトがあります。

    確認ですが、Administrator で確認していますか?こちらはDomain Adminsのユーザーを使用しています。

    יום שישי 12 יולי 2019 00:30
  • PowerShellの方はとりあえずこれだけです。

    Get-ADUser -LDAPFilter '(&(objectClass=user)(!objectClass=computer))' -Properties scriptPath | Select-Object DistinguishedName,scriptPath

    ついでにコマンドプロンプトは以下です。

    dsquery user -name k* -limit 0 | dsget user -dn -loscr

    csvde -f file.csv でも同様の結果です。


    • נערך על-ידי upken יום שישי 12 יולי 2019 00:55
    יום שישי 12 יולי 2019 00:44
  • チャブーンです。

    まあよくわからないのですが、ひとまずいくつかのパラメータを決め打ちして、絞り込んでみてはどうでしょうか?たとえば、以下のように。

    # アクセスするユーザー権限を決めます。ビルトインドメインAdministratorを指定してください
    $Cred=Get-Credential
    
    # このケースではLDAPFilterやFilterは不要です。Get-ADUser内で最初から最小条件でフィルターされているからです。ユーザー権限やサーバー先を指定します。
    Get-ADUser -Filter * -Properties @("scriptPath") -Credential $Cred -Sever <ドメインコントローラーのFQDN> | Select distinguishedName, scriptPath

    うえでよい結果が出ない、気に入らないということなら、Get-ADUserはあきらめ、Get-ADObjectを直接指定すればいいと思います。直るかどうかはわからないですが。

    # アクセスするユーザー権限を決めます。ビルトインドメインAdministratorを指定してください
    $Cred=Get-Credential
    
    # ユーザー権限やサーバー先を指定します。
    Get-ADObject -LDAPFilter '(&(objectClass=user)(!objectClass=computer))' -Properties @("scriptPath") -Credential $Cred -Sever <ドメインコントローラーのFQDN> | Select distinguishedName, scriptPath


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。

    • סומן כתשובה על-ידי upken יום שישי 12 יולי 2019 03:42
    יום שישי 12 יולי 2019 02:41
    מנחה דיון
  • データが取得できない原因がわかりました。

    ビルトイン ドメイン Administrator 以外の管理者アカウントで情報を取得するには、「管理者として実行」の上で実行する必要がありました。

    データが取得できたりできなかったり、ldapsearch だと取得できる原因はわかりませんが、お付き合いいただきありがとうございました。

    יום שישי 12 יולי 2019 03:42