Como obter uma lista de todas as listas de distribuição e seus membros no Exchange 2007?

3

Estou procurando uma lista de todas as listas de distribuição no Exchange junto com os membros delas? Isso é possível usando qualquer ferramenta interna do Exchange? Powershell? Ferramentas de terceiros?

    
por Rob Burke 13.07.2010 / 15:02

3 respostas

7

Os grupos de distribuição são armazenados no Active Directory. Este script Powershell listará todos os grupos de distribuição no domínio do AD e seus membros. Se você as tiver armazenado como grupos de segurança, remova "(| (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"
    }
}
    
por 13.07.2010 / 15:22
0

Ou se você preferir usar o Powershell que vem com o Exchange, aqui está um script alternativo. Vai

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

Isso deve produzir uma saída semelhante a:

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

No entanto, você precisa.

Esse script veio em grande parte do topo da minha cabeça e provavelmente contém bugs.

    
por 13.07.2010 / 17:49
0

Aceitei a resposta de Torai, pois foi a que usei, mas fiz uma pequena alteração na aparência do foreach para que ela emitisse a Lista de distribuição na mesma linha que os dados do usuário:

foreach ($objResult in $colResults){
    $objItem = $objResult.Properties;
    foreach ($objMember in $objItem.member) {
        Write-Output "$($objItem.cn),$($objMember)"
    }
}
    
por 13.07.2010 / 17:54