2 votes

Comment obtenir une liste de toutes les listes de distribution et de leurs membres dans Exchange 2007?

Je cherche à obtenir une liste de toutes les listes de distribution dans Exchange ainsi que leurs membres? Est-ce possible en utilisant des outils intégrés à Exchange? Powershell? Des outils tiers?

6voto

popcnt Points 1842

Les groupes de distribution sont stockés dans Active Directory. Ce script Powershell répertoriera tous les groupes de distribution dans le domaine AD et leurs membres. Si vous les avez effectivement stockés en tant que groupes de sécurité, supprimez "(|(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"
    }
}

1 votes

J'ai apporté une petite modification pour afficher la liste de distribution sur la même ligne que l'utilisateur : foreach ($objResult in $colResults){ $objItem = $objResult.Properties; foreach ($objMember in $objItem.member) { Write-Output "$($objItem.cn),$($objMember)" } }

0voto

sysadmin1138 Points 129885

Ou si vous préférez utiliser le Powershell fourni avec Exchange, voici un script alternatif. Il va

# 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"
}

Cela devrait produire une sortie qui ressemble à :

"Comptabilité","Mary Joe","Fred Smith"
"Bureau de réception"
"Bureau, domicile","John Birtram"

Adaptez comme vous en avez besoin.

Ce script est largement sorti de ma mémoire et contient probablement des bugs.

0voto

Oded Points 271275

J'ai accepté la réponse de Torai car c'est celle que j'ai utilisée mais j'ai fait un petit changement dans la boucle foreach pour qu'elle affiche la liste de distribution sur la même ligne que les données de l'utilisateur :

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X