📝

Active Directory:ユーザーの所属グループをCSV出力

2021/03/14に公開

オンプレAD環境でユーザーのアクセス権を整理するために所属グループをCSV出力するPowerShellを書いてみた。

前提条件

  • ドメインコントローラーにコンソールかリモートデスクトップでログオンして操作する
  • 管理者の PC から操作する場合は、Active Directory モジュールが使えること

処理の中身

  • ステップ1:ユーザーの所属グループを3つまでCSV出力(アカウント名,所属グループ1,2,3)
Member.csv
"SamAccountName","MemberOf1","MemberOf2","MemberOf2"
"test-user01","CN=sec-member01,OU=testOU01,OU=User,DC=test,DC=com","CN=sec-member02,OU=group,DC=test,DC=com","CN=sec-member03,OU=group,DC=test,DC=com"
  • ステップ2:CN(セキュリティグループ名)のみに置換
    正規表現を使って、CNのみにする。これが最終的に出力されるCSVの中身になる。
Member.csv
"SamAccountName","MemberOf1","MemberOf2","MemberOf3"
"test-user01","sec-member01","sec-member02","sec-member03"
  • MemberOf1,SamAccountNameで並び替え
  • Shift_JISでCSV出力

完成したスクリプト

Import-Module ActiveDirectory

# 表示が切れる場合は、画面バッファサイズ変更
# $bufferSize = (Get-Host).UI.RawUI.BufferSize
# $windowSize = (Get-Host).UI.RawUI.WindowSize
# $bufferSize.Width = 1000
# $bufferSize.Height = 1000
# $windowSize.Width = 120
# $windowSize.Height = 50
# (Get-Host).UI.RawUI.BufferSize = $bufferSize
# (Get-Host).UI.RawUI.WindowSize = $windowSize

# 取得したいOUを指定
# 例:"OU=User,DC=test,DC=com"
$GetOU = "OU=〇〇,DC=〇〇,DC=〇〇"

# 出力するファイル名を指定
$OutFile = "Member.csv"

#OU配下のユーザーの所属グループを3つまで書き出し
#より多くの所属グループを書き出したい場合は、 @{L="MemberOf*"; E={$_.MemberOf[*]}} を追加する。
Get-ADUser -Filter * -SearchBase $GetOU -SearchScope Subtree -Properties MemberOf |
 Select-Object SamAccountName,@{L="MemberOf1"; E={$_.MemberOf[0]}},`
                    @{L="MemberOf2"; E={$_.MemberOf[1]}},`
                    @{L="MemberOf3"; E={$_.MemberOf[2]}} |
 Export-Csv $OutFile -Encoding Default -NoTypeInformation

# 不要な文字を削除 (CNのみに置換)
$(Get-Content $OutFile) |
 ForEach-Object {$_ -replace("CN=(.*?),.*?(?=`")",'$1')} |
 Out-File $OutFile -Encoding default


これも一旦CSVに出力して、不要な文字を削除してから並び替えしてるので、スマートじゃないけど、とりあえず欲しい情報をとれた。

参考

https://docs.microsoft.com/en-us/powershell/module/addsadministration/get-aduser?view=windowsserver2019-ps

関連スクリプト

https://zenn.dev/8chikuwa3/articles/9d4d23db5117ca

Discussion