Powershellを使ってActive Directoryからメンバーリストを取得する
Powershellを使うとActive Directoryに問い合わせることで部署や配布リストのメンバー一覧をかんたんに取得できます。会社がMicrosoft色に染まっている方はぜひ活用してください。所属者一覧を手作業でメンテしている人がいてちょっと日本のITレベルに絶望したので「もっと広まれ!」って思って記事にします。
Active Directoryサーバにログインできればすぐにコマンド使えるんですが、手作業でメンテナンスしているって方はそういう権限無い方がほとんどだと思います。普通のパソコンでも管理ツールをインストールすることで問い合わせできるんですよ!まずはこちらを参考にActive Directoryコマンドを使えるようにしてください。
Get-Aduserコマンドを使えばそのユーザーの情報が取得できます。パソコンがactive directoryにjoinしているならご自身のユーザーもactive directoryユーザーかと思います。
1 2 |
$user = $env:USERNAME Get-Aduser $user |
これで返ってくる DistinguishedName のなかにCanonical Name (CN)とtopまでのOrganization Unit(OU)が記載されています。このOUデータを-SearchBaseオプションに指定するとGet-AdUserの検索の範囲指定ができます。逆にUserは指定してないので、-filterオプションで*(全員)を指定する必要があります。
1 |
Get-ADUser -SearchBase "所属部署" -Filter * |
所属部署を「自分の所属部署」にする場合、自分のユーザー検索してDistinguishedNameのOUから始まる部署検索すれば良いんです。
1 2 3 |
$user = $env:USERNAME $ADuser = (Get-Aduser $user).DistinguishedName $Dep = $ADuser.Substring($ADuser.IndexOf("OU"),$ADuser.Length-$Aduser.IndexOf("OU")) |
さらにもう一個上の部署を指定したい場合は、2個めのOUを指定するだけです。
1 |
$Unit = $Dep.Substring($Dep.IndexOf("OU",3),$Dep.Length-$Dep.IndexOf("OU",3)) |
この組織の所属一覧を取得するには、下記コマンドでできます。
1 |
$UnitMemberList = Get-ADUser -SearchBase $Unit -Filter * -Properties * |
-Properties *オプションは、設定されている値を全部取得しているだけで、標準で出力されるデータで足りるのであれば必要ありません。あとはこれをデータとして出力すれば終わりです。
1 |
$UnitMemberList|Select-Object DisplayName,Department,Office,OfficePhone,UserPrincipalName,mail,SamAccountName,DistinguishedName|Sort-Object Department,DisplayName|Export-CSV -encoding default -path ".¥MemberList.csv" -NoTypeInformation |
Select-Objectは取得できたプロパティのうち、必要そうなのを選択しただけなので自由に変えてください。$UnitMemberList[0]とかで表示させれば必要なプロパティが判断できると思います。
管理人おすすめのImportExcelモジュールを使うとcsvじゃなくてExcelに直接吐き出せます。
1 2 |
Import-Module importexcel $UnitMemberList|Select-Object DisplayName,Department,Office,OfficePhone,UserPrincipalName,mail,SamAccountName|Sort-Object Department,DisplayName|Export-Excel -Path $UnitMemberListPath -FreezeTopRow -AutoFilter -TitleBold -Show -AutoSize -ClearSheet |
Expoer-Excelに関しては下記を御覧ください。