📝

Active Directory:ユーザー情報をCSV出力

2021/03/14に公開

オンプレ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に出力して、不要な文字を削除してから並び替えしてるので、スマートじゃないけど、とりあえず欲しい情報をとれた。

参考

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

関連スクリプト

https://zenn.dev/8chikuwa3/articles/dad9b6372f2985

Discussion