Supposons que j'ai un groupe de distribution en échange qui existe actuellement et détient environ 20 membres.
À PowerShell 2, j'ai acquis une liste d'environ sept cent plus d'individus qui doivent être ajoutés au groupe. La seule façon dont j'ai pu faire cela est un utilisateur à la fois:
Add-DistributionGroupMember -Idneity GROUP-NAME -Member Member1
Add-DistributionGroupMember -Idneity GROUP-NAME -Member Member2
....
Add-DistributionGroupMember -Idneity GROUP-NAME -Member MemberN
Existe-t-il un mécanisme disponible qui me permet d'ajouter tous les utilisateurs d'un seul appel de fonctions, comme représenté par le pseudo-code suivant?
SOME-CMDLET-TO-ADD-LOTS-AT-ONCE -Identity GROUP-NAME -Member COLLECTION-OF-PEOPLE
Je ne cherche pas de constructions en boucle. Je recherche une fonction ou une cmdlet pouvant ajouter tous les membres à la fois, ne prenant idéalement qu'un seul argument faisant référence à la liste complète. J'ai peur de penser ce que PowerShell ferait avec 700 arguments de ligne de commande ...
(J'espère que si cela IS possible, que je puisse transmettre un tableau ou une collection d'objets à ajouter.)
Aucune suggestion? Je ne vois pas de commandement appelé "Set-DistributionGroupmembermember" et je ne vois pas non plus rien de prometteur dans "Set-DistributionGroup".
Je ne sais pas pourquoi vous ne voulez pas utiliser de construction de boucle; C'est un peu l'une des principales caractéristiques du PS. Un simple:
Import-CSV FileName.csv | ForEach {Add-DistributionGroupMember -Identity "GROUP-NAME" -Member $_.Name}
ferait facilement le tour. À défaut, cependant, il n'y a pas de cmdlet pour faire exactement ce que vous voulez. Tu pourrais faire un
Remove-DistributionGroup GROUP-NAME; New-DistributionGroup -Name GROUP-NAME -Members memberlist
mais c'est un peu de fromage.
Poussé avec succès un groupe de distribution en créant un fichier texte, remplissant des alias de compte membre, puis exécutant la commande:
% Get-Content <path\filename.txt> | Add-DistributionGroupMember "<Display Name of Distribution Group>"
Voir ces URL pour plus de détails:
Essayez ceci, il semble fonctionner pour moi:
Get-Content | Add-DistributionGroupemembermembermember
Le fichier texte contient simplement les alias des utilisateurs que vous souhaitez ajouter.
Je ne sais pas pourquoi les équipes de Microsoft ont fait cela si compliqué. Parfois, il vous suffit de penser simple.
"user1","user2","user3" | Add-DistributionGroupMember -Identity "SomeMailbox"
Je sais que c'est un ancien poste, mais c'est toujours le résultat n ° 1 sur Google lorsque vous essayez de trouver comment ajouter plusieurs utilisateurs à un DL donc j'ai pensé que je postirais ma solution.
Les solutions précédentes fonctionneront bien pour une petite liste d'utilisateurs, mais comme l'affiche originale indiquait des problèmes de performance et de mise à l'échelle avec appel Add-DistributionGroupMember
Pour chaque membre lorsqu'il s'agit de changements d'adhésion importants, et cela est aggravé lorsqu'il s'agit de O365.
Pour résoudre ces problèmes, vous pouvez utiliser Update-DistributionGroupMember
Pour remplacer l'appartenance totale d'un DL au lieu de les ajouter un par un.
par exemple. Pour la demande originale, vous feriez cela:
Update-DistributionGroupMember -Identity GroupName -Members user1@domain,user2@domain,usern@domain
ou
Update-DistributionGroupMember -Identity GroupName -Members $ArrayOfMemberEmailAddresses
Cela remplace l'appartenance de la DL, donc si vous souhaitez conserver l'adhésion existante, vous auriez besoin de la récupérer d'abord en utilisant Get-DistributionGroupMember
Puis créez un tableau des membres existants et de nouveaux et donnez-le à Update-DistributionGroupMember
Comme ce qui suit:
$NewMembers = Get-Content <path to member list text file>
$CurrentMembers = (Get-DistributionGroupMember -Identity GroupName).PrimarySmtpAddress | where {$_ -ne ""}
$NewMemberList = $CurrentMembers + $NewMembers
Update-DistributionGroupMember -Identity GroupName -Members $NewMemberList -Confirm:$false
Enfin, si vous essayez de mettre à jour l'adhésion sur une tonne de DLS dans l'O365 comme si j'avais besoin, vous pouvez ajouter le commutateur -ASJOB à la commande Update-DistributionGroupMember
Dans votre boucle afin qu'elle exécute toutes les mises à jour en parallèle plutôt que d'attendre que chaque mise à jour de l'adhésion se termine avant de passer à autre chose. Cela accélérera considérablement votre script, mais assurez-vous de faire une lecture sur PowerShell Remoting et d'utiliser des emplois d'abord si vous ne les connaissez pas encore, car il y a un travail supplémentaire que vous aurez besoin de faire ensuite pour obtenir les résultats, vérifier Pour les erreurs, etc.
Ce faisant de cette façon au lieu d'utiliser Add-DistributionGroupMember
Réduit le nombre de commandes envoyées à O365 pour ma migration DL de quelque part environ 150k à environ 2,5 000 et réduit mon éventuel de script de plusieurs jours à une soirée pour migrer l'adhésion à 1200 DLS.
Si la performance est un add-adgroupement préoccupant est de loin le plus rapide, et comme mentionné peut prendre une matrice comme entrée du paramètre -Member.
Il ressemble à la quête Active Directory PowerShell CMDlets peut ajouter plusieurs utilisateurs à un groupe à la fois par cette page wiki . Dans mes brefs tests, j'ai pu utiliser la cmdlet Add-Qadgroupmember pour ajouter une petite gamme d'utilisateurs à un groupe de test dans Active Directory.
Quelque chose comme ça, pas sûr de si cela est bien écrit ou travaillant - juste une idée.
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()
}
Il peut aussi être utile d'ajouter une annonce avec ceci:
import-module ActiveDirectory
Ensuite, utilisez simplement:
Add-AdgroupMember MyList -member user.alias,user2.alias,user3.alias,...
Pour cela, vous avez besoin de RSAT installé (produit MS, gratuit) ou ne fonctionnera pas.
Pour ajouter des utilisateurs en bloc à partir du fichier texte, utilisez le script ci-dessous, il est très facile à utiliser et ce gars a écrit assez soigné
https://gallery.technet.microsoft.com/add-bulk-utilisateurs-a-6f3014b2