📝
Active Directory:ユーザー情報をCSV出力
オンプレAD環境でユーザー情報の整理をするためにアカウント名、表示名、所属OUが欲しかったのでCSV出力するPowerShellを書いてみた。
前提条件
- ドメインコントローラーにコンソールかリモートデスクトップでログオンして操作する
- 管理者の PC から操作する場合は、Active Directory モジュールが使えること
処理の中身
- ユーザー情報をCSV出力(アカウント名,表示名,CN)
UserOU.csv
"SamAccountName","DisplayName","DistinguishedName"
"test-user01","テストユーザー01","CN=test-user01,OU=testOU01,OU=User,DC=test,DC=com"
"test-user02","テストユーザー02","CN=test-user02,OU=testOU02,OU=testOU01,OU=User,DC=test,DC=com"
- CNを所属OUのみに置換
正規表現を使って、CNの次にあるOUのみにする。
UserOU.csv
"SamAccountName","DisplayName","DistinguishedName"
"test-user01","テストユーザー01","testOU01"
"test-user02","テストユーザー02","testOU02"
- DistinguishedName,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 = "UserOU.csv"
# ユーザー情報を書き出し(アカウント名,表示名,CN)
Get-ADUser -Filter * -SearchBase $GetOU -SearchScope Subtre -Properties DisplayName |
Select-Object SamAccountName, DisplayName, DistinguishedName |
Export-Csv $OutFile -Encoding Default -NoTypeInformation
# 不要な文字を削除(CNを削除し、所属OUのみに置換)
$(Get-Content $OutFile) |
ForEach-Object {$_ -replace("CN=.*?,OU=(.*?),.*(?=`")",'$1')} |
Out-File $OutFile -Encoding default
一旦CSVに出力して、不要な文字を削除してから並び替えしてるので、スマートじゃないけど、とりあえず欲しい情報をとれた。
参考
関連スクリプト
Discussion