Powershell 2: Adicionar vários membros ao grupo de distribuição com uma chamada?

4

Suponha que eu tenha um grupo de distribuição no Exchange que existe atualmente e tenha cerca de 20 membros.

Em Powershell 2, adquiri uma lista de cerca de sete cem pessoas que precisam ser adicionadas ao grupo. A única maneira que consegui fazer isso é um usuário por vez:

Add-DistributionGroupMember -Idneity GROUP-NAME -Member Member1
Add-DistributionGroupMember -Idneity GROUP-NAME -Member Member2
....
Add-DistributionGroupMember -Idneity GROUP-NAME -Member MemberN

Existe um mecanismo disponível que permite adicionar todos os usuários com apenas uma chamada de função, conforme representado pelo seguinte pseudo-código?

SOME-CMDLET-TO-ADD-LOTS-AT-ONCE -Identity GROUP-NAME -Member COLLECTION-OF-PEOPLE

Eu não estou procurando por construções de loop. Estou à procura de uma função ou cmdlet que possa adicionar todos os membros de uma só vez, de preferência tomando apenas um argumento referenciando a lista inteira. Estou com medo de pensar no que o Powershell faria com mais de 700 argumentos de linha de comando ...

(Eu estou esperando que, se isso for possível, eu possa passar uma matriz ou coleção de objetos a serem adicionados.)

Alguma sugestão? Eu não vejo um comando chamado 'set-distributiongroupmember', e também não vejo nada de promissor em 'set-distributiongroup'.

    
por Larold 28.09.2011 / 22:20

8 respostas

8

Não sei por que você não quer usar uma construção de loop; esse é um dos principais recursos do PS. Um simples:

Import-CSV FileName.csv | ForEach {Add-DistributionGroupMember -Identity "GROUP-NAME" -Member $_.Name}

faria facilmente o truque. Na falta disso, porém, não há cmdlet para fazer exatamente o que você deseja. Você poderia fazer um

Remove-DistributionGroup GROUP-NAME; New-DistributionGroup -Name GROUP-NAME -Members memberlist

mas isso é um pouco brega.

    
por 28.09.2011 / 22:34
2

Preencha com êxito um grupo de distribuição criando um arquivo de texto, preenchendo com aliases de conta de membro e executando o comando:

% Get-Content <path\filename.txt> | Add-DistributionGroupMember "<Display Name of Distribution Group>"

Veja estes URLs para mais detalhes:

por 05.03.2013 / 15:38
1

Tente isso, parece funcionar para mim:

Get-Content | Add-DistributionGroupMember

O arquivo de texto contém apenas os aliases dos usuários que você deseja adicionar.

    
por 15.02.2013 / 17:14
1

Não sei por que as equipes da Microsoft tornaram isso tão complicado. Às vezes você só tem que pensar simples.

"user1","user2","user3" | Add-DistributionGroupMember -Identity "SomeMailbox"
    
por 06.02.2014 / 12:40
0

Parece que os cmdlets do Quest Active Directory PowerShell podem adicionar vários usuários a um grupo por vez a esta página da wiki . Em meu breve teste, consegui usar o cmdlet Add-QADGroupMember para adicionar uma pequena matriz de usuários a um grupo de teste no Active Directory.

    
por 01.12.2011 / 18:37
0

Também pode ser útil adicionar o AD com isso:

import-module ActiveDirectory

Depois é só usar:

Add-AdgroupMember MyList -member user.alias,user2.alias,user3.alias,...

Para isso, você precisa do RSAT instalado (produto MS e gratuito) ou não funcionará.

    
por 19.11.2014 / 18:21
0

Se o desempenho é uma preocupação, o Add-ADGroupMember é, de longe, o mais rápido, e como mencionado, pode-se tomar uma matriz como entrada para o parâmetro -Member.

    
por 31.01.2015 / 02:24
0

Algo assim, não tenho certeza se isso está bem escrito ou funcionando - apenas uma ideia.

Function Add-DistributionGroupMembers_Safe {
Param (
    [Parameter(Mandatory=$true)]
    [String]$Identity,
    [Parameter(Mandatory=$true)]
    [String[]]$Member
)
    $local:groupADSI = [ADSI]"LDAP://${$(Get-DistributionGroup -Identity $Identity).DistinguishedName}"
    $local:DGUsers = @( @( Get-DistributionGroupMember -Identity $Identity ).Name )
    $local:UsersToAdd = @( $Member | Where-Object { $local:DGUsers -notcontains $_ } | ForEach-Object { return (Get-ADUser -Name $_}).DistinguishedName )
    ForEach ($user in $local:UsersToAdd) {
        try {
            $local:GroupADSI.Properties["member"].Add($user) | Out-Null
        } catch {
            #Error processing, text in $_.Exception.Message
        }
    }
    $group.CommitChanges()
}
    
por 31.01.2015 / 05:44