💻
Active Directory:コンピューター情報をCSV出力
オンプレ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