2016-05-10 1 views
-1

Ce script fonctionne sans erreur maintenant, mais le problème est que lorsque plusieurs groupes dans la base de recherche sont trouvés, le script ajoutera tous les utilisateurs de tous les groupes aux groupes cibles de la forêt croisée.Powershell Ajout d'utilisateurs dans les groupes pour traverser les groupes forestiers

Ainsi, par exemple:

ForestAGroup1 = contient 2 utilisateurs

ForestAGroup2 = contient 2 utilisateurs

:: exécute le script ::

maintenant ...

ForestBGroup1 = Il contient 4 utilisateurs

ForestBG roup2 = contient 4 utilisateurs

Le ForestBGroup1/2 doit contenir les mêmes utilisateurs identiques que ForestAGroup1/2.

Voici le script de référence:

$creds = Get-Credential 
$Groups = Get-ADGroup -Properties * -Filter * -SearchBase "OU=TEST,OU=Shop Print Groups,OU=User,OU=domain Groups,DC=domainA,DC=com" | export-csv c:\temp\test.csv 
$Groups = Get-ADGroup -Properties * -Filter * -SearchBase "OU=TEST,OU=Shop Print Groups,OU=User,OU=domain Groups,DC=domainA,DC=com" 
Foreach($G In $Groups) 
{ 
    #Display group members and group name 
    Write-Host $G.Name 
    Write-Host "-------------" 
    $G.Members 

    #Add members to domainB group 
    $domainGMembers = import-csv C:\temp\test.csv | ForEach-Object -Process {Get-ADGroupMember -Identity $_.CN} | Select-Object samaccountname | export-csv c:\temp\gmembers.csv 

    $domainDNUser = import-csv C:\temp\gmembers.csv | ForEach-Object -Process {Get-ADUser $_.samaccountname -Server "domainA.com" -properties:Distinguishedname} 

    import-csv C:\temp\gmembers.csv | ForEach-Object -Process {Add-ADGroupMember -Server "domainB.com" -Identity $G.Name -Members $domainDNUser -Credential $creds -Verbose} 

} 
+1

Vous devez toujours nettoyer votre exemple pour les informations sensibles. Rappelez-vous que Contoso.com est une excellente entreprise. Les données se trouvent maintenant dans l'historique .. –

+0

Votre question n'est pas claire. Vous dites que vous voulez avoir les mêmes membres dans ForestBGroup1 que dans ForestAGroup1 ("Le ForestBGroup1/2 doit contenir les mêmes utilisateurs que ForestAGroup1/2."), Mais votre exemple montre deux membres dans A1 et 4 en B1. Avoir tous les membres dans tous les groupes ne semble pas correct, donc ma réponse ne correspondrait qu'à A1 avec B1 etc. Si vous voulez vraiment tous les utilisateurs dans chaque groupe B, alors vous devriez les ajouter à un groupe B et l'ajouter au autres groupes B Vous ne voulez pas conserver 10s de groupes avec des membres identiques. –

+0

Mon exemple est propre des informations sensibles, d'après ce que je peux voir? Oui, ForestAGroups1/2 doit correspondre à ForestBGroups1/2, mais il ajoute tous les utilisateurs aux groupes ForestB de destination. – Kyle

Répondre

0

Que fais-tu?

  • Vous exportez vers csv, mais toujours essayer de l'enregistrer à une variable
  • Vous recherchez deux fois
  • Vous ajoutez tous les membres de tous les groupes de TEST -où à chaque groupe domainB
  • Vous gaspillez temps sur l'enregistrement et la lecture des données que vous avez déjà en mémoire
  • Vous recherchez l'objet utilisateur pour obtenir SamAccountName lorsque vous avez déjà quelque chose de dix fois mieux, le DN. Ensuite, vous utilisez ce SamAccountName pour trouver le DN.

Try this (non testé):

$creds = Get-Credential 
$Groups = Get-ADGroup -Properties Members -Filter * -SearchBase "OU=TEST,OU=Shop Print Groups,OU=User,OU=domain Groups,DC=domain,DC=com" 
Foreach($G In $Groups) 
{ 
    #Display group members and group name 
    Write-Host $G.Name 
    Write-Host "-------------" 
    $G.Members 

    #Add members to domainB group 
    $G.Members | 
    Get-ADUser -Server fairfieldmfg.com | 
    ForEach-Object { Add-ADGroupMember -Server "domainB.com" -Identity $G.Name -Members $_ -Credential $creds -Verbose } 
} 

J'ai utilisé une boucle foreach pour exécuter le Add-ADGroupMember parce qu'elle ne trouve habituellement au milieu d'un groupe de membres si elle trouve le est déjà membre , mais si nous les ajoutons un à la fois, vous contournez cela (ou vous pourriez faire une recherche et exclure ceux qui sont déjà dans le groupe). Vous pouvez ajouter -ErrorAction SilentlyContinue à Add-ADGroupMember pour ignorer ces erreurs lorsque vous savez que le script fonctionne comme il se doit.

+0

Il vous manque le point que vous devez rechercher chaque utilisateur AD du domaine DomainA source. Parce que votre solution a des erreurs avec "Impossible de trouver un objet avec l'identité: bla bla" Ma solution peut sembler maladroite, mais au moins, elle ne fait pas d'erreur à ce stade et parvient à saisir les objets corrects. J'ai juste du mal à les ajouter aux groupes appropriés maintenant. – Kyle

+0

Ajouté: 'Get-ADUser $ G.Members -Server fairfieldmfg.com -properties: Distinguishedname | ForEach-Object {Add-ADGroupMember -Serveur "dom02.net" -Identity $ G.Name -Members $ _ -Credential $ creds -Verbose} 'Mais cela échoue également avec' Get-ADUser: Impossible de convertir 'Microsoft.ActiveDirectory.Management .ADPropertyValueCollection 'au type' Microsoft.ActiveDirectory.Management.ADUser 'requis par le paramètre' Identity '. La méthode spécifiée n'est pas supportée. » – Kyle

+0

J'ai besoin de la vraie erreur (éteindre les mots simples, pas le message entier). Code doit être ajouté dans la question, pas dans les commentaires .. Quant au script. Je ne vois pas le problème .. Les groupes sont domainA, les membres sont domainA ... Vous prenez les membresDN DomainA d'un groupe, recherche dans domainA pour samaccountname (gaspillage), utilisez cela pour rechercher DN dans domaina (que vous déjà eu), et puis vous ajoutez au domainb-groupe .. La seule raison que je peux voir sauter les deux "get utilisateur samaccountname, puis DN" étant un problème est si ForestAGroup1 contient des utilisateurs de DomainB .. Y at-il? –