我正在寻找一个所有的通讯组列表的交stream清单,以及他们的成员? 这可能使用任何内置的Exchange工具吗? 电源shell? 第三方工具?
通讯组存储在Active Directory中。 此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" } }
或者,如果您更愿意使用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"
Adust,但是你需要。
这个脚本很大程度上来自我头顶,可能包含错误。
我已经接受了Torai的答案,因为它是我使用的答案,但是我在foreach中做了一些小改动,让它在与用户数据相同的行上输出分发列表:
foreach ($objResult in $colResults){ $objItem = $objResult.Properties; foreach ($objMember in $objItem.member) { Write-Output "$($objItem.cn),$($objMember)" } }