none
ADGroupメンバーの基本的な属性以外のエクスポートについて RRS feed

  • 質問

  • 任意のOUに所属するADGroupごとに、参加メンバー(ユーザーとグループ混在)の基本的な属性以外(特にuserPrincipalName mailNickname)の値をエクスポートする方法を教えていただけると幸いです。

    sAMAccountNameであれば、フォーラムに掲示されていた「ADGroupとADGroupメンバーの一覧」を参考に取得でき、また参加メンバーをユーザー、グループと別々になら取得できました。

    ただ取得後に加工が必要で、現実的では無く困っています。

    どなたか、御教示いただけると幸いです。

    2020年9月18日 7:53

回答

  • チャブーンです。

    この件、返答が遅くなりましたが、なぜ Get-ADGroupMember -Recursiveではだめなのでしょうか?OU内グループのメンバーとなるユーザーの情報が最終的に必要なのでしょうから、一度で取得できるこの方法が、かなり簡単だと思います。

    どうしてもそうでない方法、ということでしたら、仕方ないのでobjectClassで識別する方法になるでしょう。具体的な処理は書きませんが、やり方としては以下のようになると思います。

    $Objects = Get-ADObject -Filter * -SearchBase "<OUのDN>"
    
    Foreach ($Object in $Objects) {
        IF ($Object.objectClass -eq "user") {
             <Get-ADUserの処理を書く> 
    } ElseIF ($Object.objectClass -eq "group") { <Get-ADGroupの処理を書く>
         } }


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

    2020年9月28日 10:39

すべての返信

  • チャブーンです。

    この件ですが、以下のGet-ADGroupMemberを使うと、うまくいくのではないでしょうか。-Recursiveオプションでメンバーとなっているグループのメンバーを再帰的に検索すると、シアワセになれそうです。

    https://docs.microsoft.com/en-us/powershell/module/addsadministration/get-adgroupmember?WT.mc_id=EM-MVP-8322

    $Users = Get-ADGroupMember -Recursive <グループ名> | Get-ADUser -Properties * | Select sAMAccountName, userPrincipalName, mailNickName
    
    $Users | Export-CSV -NoTypeInformation <CSVファイル名>  -Encoding Default
    
    
    


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


    2020年9月18日 16:38
  • 御返信、ありがとうござます。

    実現したいことの説明が不足していました、申し訳ありません。

    エクスポートしたい情報は、AD上の任意のグループについてプロパティ画面のメンバータブで表示される、グループとユーザーの各アカウントの基本的な属性以外(特にmailNickname)の値です。

    なお、mailNicknameには別途データを埋め込ませています。

    メンバーの各々について、ユーザーアカウントであれば「Get-ADUser」、グループアカウントであれば「Get-ADGroup」を使い分ければmailNicknameを取得できることはわかっているので、アカウントの種類に応じて、Get-ADUser」と「Get-ADGroup」を自動選択?できれば良いのではないかと思っていますが、条件分岐やエラー処理などの知識が足りず、実現できずにいます。

    1つのスクリプトで任意のOUにあるグループごとに、メンバー情報をエラー表示なくエクスポートするお手本をお教えいただけないでしょうか?


    2020年9月23日 3:01
  • チャブーンです。

    この件、返答が遅くなりましたが、なぜ Get-ADGroupMember -Recursiveではだめなのでしょうか?OU内グループのメンバーとなるユーザーの情報が最終的に必要なのでしょうから、一度で取得できるこの方法が、かなり簡単だと思います。

    どうしてもそうでない方法、ということでしたら、仕方ないのでobjectClassで識別する方法になるでしょう。具体的な処理は書きませんが、やり方としては以下のようになると思います。

    $Objects = Get-ADObject -Filter * -SearchBase "<OUのDN>"
    
    Foreach ($Object in $Objects) {
        IF ($Object.objectClass -eq "user") {
             <Get-ADUserの処理を書く> 
    } ElseIF ($Object.objectClass -eq "group") { <Get-ADGroupの処理を書く>
         } }


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

    2020年9月28日 10:39
  • 御教授、ありがとうございます。

    使用しているファイルサーバ上に複数の共有フォルダがあるのですが、これらのフォルダごとのアクセス権をグループで管理しています。

    このグループのメンバーは、部署グループや個人ユーザーが混在しています。

    組織の変更が合った際、メンバーが個人ベースだと都度メンバーの入替を行わないとならないのですが、部署グループであれば、その部署グループのメンバーを入れ替えるだけでこのアクセス権用のグループのメンバーは入れ替えずに済みます。

    このような構成で利用しているため、特定のグループのメンバー構成を-Recursiveで個人ベースに置きかえて取得せず、プロパティ画面で表示される、グループとユーザーが混在する形で情報を取得したいと考えていました。

    PowerShellコマンドは多岐に渡って多様なことができると思っていますが、私にとってはイメージしたものを実現するコマンドやスクリプトを調べて書き上げるのが難しく、御教授いただけてとても参考になり、感謝しております。

    恥ずかしながら、objectClassで識別する方法は初めて知りました。

    この後は処理の部分を書いて、情報取得ができるようにしたいと思います。

    返信とお礼が遅くなり、申し訳ありませんでした。

    ありがとうございました。

    2020年10月7日 7:40