ADグループの一覧表を作成するスクリプト

10.09

ExchangeServerなどを利用している場合は、ActiveDirectoryのグループはそのままメールの配布リストにしているケースが多いと思います。

組織図がきれいで、かなり工夫して作りこんだ場合は特に発生しない問題なのですが、必要に応じてグループをどんどん増やしたなどの結果によって

配布されるユーザーが誰なんだ?というお問い合わせが増えます。

階層が深いグループのメンバー一覧などを作成しようとすると手動ではとてもじゃないけどやる気にならないレベルで大変なのでスクリプトを作成しました。

このスクリプトはLDAPでメンバーを取得するため、メンバーの数が多くても問題ありません。

Get-ADGroupMember は200人くらいでオーバーフローするため、簡易的に利用するとき以外は使わないほうが吉です。

またグループの数や、ユーザー数が多い場合はDC上で実行したほうが早く終わって幸せです。

同じグループについて前回取得済みの場合は、先に削除してから新たにメンバーリストを作成するので、タスクスケジューラーなどで定期実行することで最新のデータが常に保存されることになります。

$AllGroup = Get-ADGroup -Filter *

$AllGroup | % {

$Group = $User = $GroupUser = @()

$GroupName = $exist = $null

$GroupName = $_.name

$exist = Test-Path \\ファイルサーバー\$GroupName”.csv”

if($exist)

{

Remove-item \\ファイルサーバー\$GroupName”.csv” -Force

}

$s = $l = $members = $null

$s = $_.DistinguishedName

$l =[adsi]”LDAP://$s”

$members = $l.psbase.invoke(“Members”) | foreach {$_.GetType().InvokeMember(“SamAccountName”,’GetProperty’,$null,$_,$null)}

$members | % {

$ObjectClass = $null

$ObjectClass = Get-ADObject -Filter {SamAccountName -eq $_} -Properties ObjectClass

if($ObjectClass.ObjectClass -eq “user”)

{

$User += $_

}

else

{

if($ObjectClass.ObjectClass -eq “group”)

{

$Group += $_

}

}

}

$User | % {

$UserAccount = $null

$UserAccount = Get-ADUser $_ -Properties DisplayName,EmailAddress

$note = $null

$note = $UserAccount.DisplayName + “`t” + “User” + “`t” + $UserAccount.EmailAddress

$note | Out-File \\ファイルサーバー\$GroupName”.csv” -Append

}

$Group | % {

$GroupAccount = $null

$GroupAccount = Get-ADGroup $_ -Properties DisplayName,mail

if($GroupAccount -eq $null)

{

$GroupAccount = Get-ADGroup $_ -Properties DisplayName,mail

}

$note = $null

$note = $GroupAccount.DisplayName + “`t” + “Group” + “`t” + $GroupAccount.EmailAddress

$note | Out-File \\ファイルサーバー\$GroupName”.csv” -Append

}

}

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

2018年10月
« 9月    
1234567
891011121314
15161718192021
22232425262728
293031  
ページ上部へ戻る