Question
Remplacer Groupe dans l'AD
- Feredyr
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 5
- Remerciements reçus 0
il y a 9 ans 10 mois #21840
par Feredyr
Remplacer Groupe dans l'AD a été créé par Feredyr
Bonjour la communauté,
Je vous expose le problème qui m'occupe depuis plusieurs jours
On m'a demandé de remplacer dans l'AD, dans tous les groupes, le groupe \"TATA\" par le groupe \"TITI\"
Je ne dois pas renommé TITI car il va être réaffecté à une autre tache.
Jusque là pas trop de problème
[code:1]$lList = Get-ADGroup -Filter \"*\"
Foreach ($GroupAD in $List)
{
$MembersBefore = Get-ADGroupMember $($GroupAD.Name)
if ($MembersBefore.Name -match \"TATA\"«»)
{
Write-host \"Nom du groupe : $($GroupAD.Name)\"
Write-host \"Membre du groupe : $($MembersBefore.Name)\"
remove-ADGroupMember -Identity $GroupAD.distinguishedname -Members \"TATA\" -Confirm:$false
Add-ADGroupMember -Identity $GroupAD.distinguishedname -Members \"TITI\" -Confirm:$false
Write-host \"Nom du groupe : $($GroupAD.Name)\"
$MembersAfter = Get-ADGroupMember $($GroupAD.Name)
Write-host \"Membre du groupe : $($MembersAfter.Name)\"
}
}[/code:1]
Le hic c'est que mon script ne parse que l'OU \"Users\" et que l'AD n'est pas très propre... il y en a partout.
J'ai bien pensé à rajouter une boucle avec Get-ADOrganizationalUnit mais celle-ci ne me prend pas en compte l'OU \"User\"
Je n'ai donc jamais un parsing complet de mon AD.
Auriez vous une idée pour que je parse tous les groupes de tous les OU ?
d'avance merci
Je vous expose le problème qui m'occupe depuis plusieurs jours
On m'a demandé de remplacer dans l'AD, dans tous les groupes, le groupe \"TATA\" par le groupe \"TITI\"
Je ne dois pas renommé TITI car il va être réaffecté à une autre tache.
Jusque là pas trop de problème
[code:1]$lList = Get-ADGroup -Filter \"*\"
Foreach ($GroupAD in $List)
{
$MembersBefore = Get-ADGroupMember $($GroupAD.Name)
if ($MembersBefore.Name -match \"TATA\"«»)
{
Write-host \"Nom du groupe : $($GroupAD.Name)\"
Write-host \"Membre du groupe : $($MembersBefore.Name)\"
remove-ADGroupMember -Identity $GroupAD.distinguishedname -Members \"TATA\" -Confirm:$false
Add-ADGroupMember -Identity $GroupAD.distinguishedname -Members \"TITI\" -Confirm:$false
Write-host \"Nom du groupe : $($GroupAD.Name)\"
$MembersAfter = Get-ADGroupMember $($GroupAD.Name)
Write-host \"Membre du groupe : $($MembersAfter.Name)\"
}
}[/code:1]
Le hic c'est que mon script ne parse que l'OU \"Users\" et que l'AD n'est pas très propre... il y en a partout.
J'ai bien pensé à rajouter une boucle avec Get-ADOrganizationalUnit mais celle-ci ne me prend pas en compte l'OU \"User\"
Je n'ai donc jamais un parsing complet de mon AD.
Auriez vous une idée pour que je parse tous les groupes de tous les OU ?
d'avance merci
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 9 ans 9 mois #21842
par Philippe
Réponse de Philippe sur le sujet Re:Remplacer Groupe dans l'AD
salut Feredyr
tu n'a donc pas de problème avec le conteneur \"users\" ou toute autre OU de l'AD
je viens de testé ton script qui fonctionne avec les corrections ci dessous
dans le cas contraire tu peut toujours forcé les choses avec l'option \"SearchBase\" et \"SearchScope\", voir la doc de Get-ADGroup
par contre tu a des erreurs de frappe et de conception :
- première ligne erreur de frappe :
[code:1]$lList = ...[/code:1]
- ici problème d'absence de la propriété \"name\" dans \"$MembersBefore\" quand le groupe testé est vide :
[code:1]if ($MembersBefore.Name -match ...[/code:1]cette erreur arrête le script dès qu'il tombe sur un groupe sans membre !!
- et enfin ici \"seulement en powershell v2\" sinon ça pose pas de problème
quand il y a plus d'un membre dans le groupe ça provoque une erreur :
[code:1]Write-host \"Membre du groupe : $($MembersAfter.Name)\"[/code:1]cette erreur n'arrête pas le script<br><br>Message édité par: 6ratgus, à: 24/05/16 10:35
ta commande \"Get-ADGroup -Filter \"*\"\" regarde tout l'AD puisque tu ne précise pas d'OULe hic c'est que mon script ne parse que l'OU \"Users\"
tu n'a donc pas de problème avec le conteneur \"users\" ou toute autre OU de l'AD
je viens de testé ton script qui fonctionne avec les corrections ci dessous
dans le cas contraire tu peut toujours forcé les choses avec l'option \"SearchBase\" et \"SearchScope\", voir la doc de Get-ADGroup
par contre tu a des erreurs de frappe et de conception :
- première ligne erreur de frappe :
[code:1]$lList = ...[/code:1]
- ici problème d'absence de la propriété \"name\" dans \"$MembersBefore\" quand le groupe testé est vide :
[code:1]if ($MembersBefore.Name -match ...[/code:1]cette erreur arrête le script dès qu'il tombe sur un groupe sans membre !!
- et enfin ici \"seulement en powershell v2\" sinon ça pose pas de problème
quand il y a plus d'un membre dans le groupe ça provoque une erreur :
[code:1]Write-host \"Membre du groupe : $($MembersAfter.Name)\"[/code:1]cette erreur n'arrête pas le script<br><br>Message édité par: 6ratgus, à: 24/05/16 10:35
Connexion ou Créer un compte pour participer à la conversation.
- Feredyr
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 5
- Remerciements reçus 0
il y a 9 ans 9 mois #21844
par Feredyr
Réponse de Feredyr sur le sujet Re:Remplacer Groupe dans l'AD
Merci beaucoup pour ta réponse !
Effectivement mon script marche beaucoup mieux sans faute de frappe...
Il devait avoir en cache une vieille version de $List et donc ne parsait que cet OU
Merci beaucoup
Je vais regarder pour modifier le if
et virer les write-host (qui n'étaient là que pour le débugage)<br><br>Message édité par: Feredyr, à: 24/05/16 11:40
Effectivement mon script marche beaucoup mieux sans faute de frappe...
Il devait avoir en cache une vieille version de $List et donc ne parsait que cet OU
Merci beaucoup
Je vais regarder pour modifier le if
et virer les write-host (qui n'étaient là que pour le débugage)<br><br>Message édité par: Feredyr, à: 24/05/16 11:40
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 9 ans 9 mois #21850
par Philippe
Réponse de Philippe sur le sujet Re:Remplacer Groupe dans l'AD
Feredyr écrit:
par contre pour le \"if\" tu peut faire ceci :
[code:1] if ($MembersBefore -and $MembersBefore.Name -match \"TATA\"«»)
[/code:1]
quelques petites choses en plus,
met une variable à la place de \"tata\" ou \"titi\" pour rendre plus polyvalent ton code
et si c'est possible, pour accélérai ton script, cible les groupes ici : Get-ADGroup -Filter {(name -like \"toto*\")} plutôt que de tout prendre et de filtrer dans le if
mais le plus simple et efficace, puisque tu connais le nom du groupe que tu doit remplacé,
il te suffit de lire dans le groupe \"tata\" la liste des groupes ou il ce trouve comme ceci (en PS v3 ou +) :
[code:1](Get-ADGroup tata -Properties memberof).memberof
[/code:1]tu n'a plus qu'a bouclé sur la liste renvoyer et de testé si c'est bien des groupes !!
y a pas de quoi, ça fait plaisir de voir que des scripts fonctionne comme voulu !!Merci beaucoup pour ta réponse !
Effectivement mon script marche beaucoup mieux sans faute de frappe...
ça montre que tu a cherché sur plusieurs piste avant de venir iciIl devait avoir en cache une vieille version de $List et donc ne parsait que cet OU
le write n'a rien de grave tu peut même les laissé pour plus tard (pour le débogage et mieux comprendre ton script) mais en les remplacent par Write-Warning ou Write-DebugJe vais regarder pour modifier le if
et virer les write-host (qui n'étaient là que pour le débugage)
par contre pour le \"if\" tu peut faire ceci :
[code:1] if ($MembersBefore -and $MembersBefore.Name -match \"TATA\"«»)
[/code:1]
quelques petites choses en plus,
met une variable à la place de \"tata\" ou \"titi\" pour rendre plus polyvalent ton code
et si c'est possible, pour accélérai ton script, cible les groupes ici : Get-ADGroup -Filter {(name -like \"toto*\")} plutôt que de tout prendre et de filtrer dans le if
mais le plus simple et efficace, puisque tu connais le nom du groupe que tu doit remplacé,
il te suffit de lire dans le groupe \"tata\" la liste des groupes ou il ce trouve comme ceci (en PS v3 ou +) :
[code:1](Get-ADGroup tata -Properties memberof).memberof
[/code:1]tu n'a plus qu'a bouclé sur la liste renvoyer et de testé si c'est bien des groupes !!
Connexion ou Créer un compte pour participer à la conversation.
- Feredyr
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 5
- Remerciements reçus 0
il y a 9 ans 9 mois #21853
par Feredyr
Réponse de Feredyr sur le sujet [Résolu] Remplacer Groupe dans l'AD
J'avais trouvé un autre moyen de contournement des groupes vides :
[code:1]$Liste = Get-ADGroup -Filter \"*\" -Properties Members | where {$_.members}[/code:1]
Mais évidement moins efficace que ta méthode. voici ce que ca donne :
[code:1]$GroupCherche = \"TATA\"
$Groupremplacant = \"TITI\"
$List =(Get-ADGroup $GroupCherche -Properties memberof).memberof
Foreach ($Group in $List)
{
remove-ADGroupMember -Identity $Group -Members $GroupCherche -Confirm:$false
Add-ADGroupMember -Identity $Group -Members $Groupremplacant -Confirm:$false
}[/code:1]
Merci pour ton coup de main je passe le topic en résolu
Message édité par: Feredyr, à: 25/05/16 16:13
Message édité par: Feredyr, à: 25/05/16 16:13<br><br>Message édité par: Feredyr, à: 25/05/16 17:02
[code:1]$Liste = Get-ADGroup -Filter \"*\" -Properties Members | where {$_.members}[/code:1]
Mais évidement moins efficace que ta méthode. voici ce que ca donne :
[code:1]$GroupCherche = \"TATA\"
$Groupremplacant = \"TITI\"
$List =(Get-ADGroup $GroupCherche -Properties memberof).memberof
Foreach ($Group in $List)
{
remove-ADGroupMember -Identity $Group -Members $GroupCherche -Confirm:$false
Add-ADGroupMember -Identity $Group -Members $Groupremplacant -Confirm:$false
}[/code:1]
Merci pour ton coup de main je passe le topic en résolu
Message édité par: Feredyr, à: 25/05/16 16:13
Message édité par: Feredyr, à: 25/05/16 16:13<br><br>Message édité par: Feredyr, à: 25/05/16 17:02
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.049 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Remplacer Groupe dans l'AD