web-dev-qa-db-ja.com

Exchange 2007ですべての配布リストとそのメンバーのリストを取得するにはどうすればよいですか?

Exchange内のすべての配布リストとそのメンバーのリストを取得したいのですが。これは、組み込みのExchangeツールを使用して可能ですか?パワーシェル?サードパーティのツール?

2
Rob Burke

配布グループはActiveDirectoryに保存されます。このPowershellスクリプトは、ADドメイン内のすべての配布グループとそのメンバーを一覧表示します。通常、セキュリティグループとして保存している場合は、「(|(groupType = 2)(groupType = 4)(groupType = 8))」を削除してください。

$strFilter = "(&(objectCategory=Group)(|(groupType=2)(groupType=4)(groupType=8)))"
$objDomain = New-Object System.DirectoryServices.DirectoryEntry
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objDomain
$objSearcher.PageSize = 1000
$objSearcher.Filter = $strFilter
$objSearcher.SearchScope = "Subtree"
$objSearcher.PropertiesToLoad.Add("cn") | Out-Null
$objSearcher.PropertiesToLoad.Add("member") | Out-Null

$colResults = $objSearcher.FindAll()
foreach ($objResult in $colResults){
    $objItem = $objResult.Properties;
    Write-Output $objItem.cn
    foreach ($objMember in $objItem.member) {
        Write-Output "   $objMember"
    }
}
6
Torai

または、Exchangeに付属のPowershellを使用したい場合は、別のスクリプトを次に示します。それは

 # dump all DLs to a variable, whether DistributionList or mail-enabled Sec-group
 $DLList = get-distributiongroup
 # Iterate over each DL to get member-list
 foreach ($DL in $DLList) {
     # Get the member list
     $Dmember=get-distributiongroupmember $DL
     # Get DL name
     $Dname=$DL.name
     # Start outputting
     write-output "`q$Dname`q" -nonewline
     # Iterate over member list, outputting
     foreach ($Member in $Dmember) {
         $MName=$Member.DisplayName
         write-output ",`q$MName`q" -nonewline
     }
     # Add terminal line-feed
     write-output "`n"
 }

これにより、次のような出力が生成されます。

 "Accounting","Mary Joe","Fred Smith"
 "Receiving Office"
 "Office, home","John Birtram"

しかし、あなたがする必要があるアダスト。

このスクリプトはほとんど頭から離れており、おそらくバグが含まれています。

0
sysadmin1138

Toraiの回答は私が使用したものであるため受け入れましたが、foreachの外観に小さな変更を加えて、ユーザーデータと同じ行に配布リストを出力するようにしました。

foreach ($objResult in $colResults){
    $objItem = $objResult.Properties;
    foreach ($objMember in $objItem.member) {
        Write-Output "$($objItem.cn),$($objMember)"
    }
}
0
Rob Burke