💻

Active Directory:コンピューター情報をCSV出力

2021/04/20に公開

オンプレAD環境で登録されているコンピューター情報の整理をするためにコンピューター名、説明、所属OUが欲しかったのでCSV出力するPowerShellを書いてみた。

前提条件

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

処理の中身

  • コンピューター情報をCSV出力(PC名,説明,CN)
PC_List.csv
"Name","Description","DistinguishedName"
"test-pc001","説明01","CN=test-pc001,OU=testOU01,OU=computer,DC=test,DC=com"
"test-pc002","説明02","CN=test-pc002,OU=testOU02,OU=computer,DC=test,DC=com"
  • CNを所属OUのみに置換
    正規表現を使って、CNの次にあるOUのみにする。
PC_List.csv
"Name","Description","DistinguishedName"
"test-pc001","説明01","testOU01"
"test-pc002","説明02","testOU02"
  • DistinguishedName,Nameで並び替え
  • Shift_JISでCSV出力

完成したスクリプト

GetAllPCName.ps1
# 表示が切れる場合は画面バッファサイズ変更
# $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

#GetOU以下のクライアントをCSVに書き出し
# 例:"OU=Computer,DC=test,DC=com"
$GetOU = "OU=〇〇,DC=〇〇,DC=〇〇"

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

Get-ADComputer -Filter * -SearchBase $GetOU -Properties Description |
 Select-Object Name,Description,DistinguishedName |
 Sort-Object -Property Name |
 Export-Csv $OutFile -Encoding Default -NoTypeInformation

 #不要な文字を削除(CNを削除し、所属OUのみ切り出し)
$(Get-Content $OutFile) | ForEach-Object {$_ -replace("CN=.*?,OU=(.*?),.*(?=`")",'$1')} | Out-File $OutFile -Encoding default

#DistinguishedNameで並び替え
$CSVDate = Import-CSV $OutFile -Encoding Default
$CSVDate | Sort-Object -Property DistinguishedName,Name | Export-Csv $OutFile -Encoding Default -NoTypeInformation

Discussion