Non
donneCode:
1
2 ((Get-ADDomain).ReplicaDirectoryServers).count ((Get-ADDomain -Server "gad.schneider-electric.com").ReplicaDirectoryServers).count
Citation:
179
24
Version imprimable
Non
donneCode:
1
2 ((Get-ADDomain).ReplicaDirectoryServers).count ((Get-ADDomain -Server "gad.schneider-electric.com").ReplicaDirectoryServers).count
Citation:
179
24
deux constats :
- vous êtes bien sécurisés 8-)
- il faut que l'utilise l'option SERVER pour chaque commande AD, et le top c'est que tu prenne dans la liste des server du gad, le serveurs le plus proche de toi, pour le mettre dans l'option server
par exemple : Get-ADUser -filter ..... -Server "server-FRAD1..eur.gad.schneider-electric.com"
de cette façon modif et consultation seront plus rapide et tu aura normalement des consultations juste après une modif et non 1h après !!
rapproche toi d'un administrateur de l'AD pour plus de precision
pour info, il semble que tu est une forest avec plusieurs domaines
Désolé de répondre que maintenant mais je n'étais pas dispo avant...
Quelle précision dois-je demander à l'administrateur AD ?
Quand je vais sur l'outil "Utilisateurs et ordinateurs AD" et je fais "changer de contrôleur de domaine", ça m'en propose 25 avec pour chacun le site, dont 6 en France et d'autres aux US, en Chine, en Allemagne et je sais pas où pour les autres.
Bien plus gênant : hier dans le post #36, je disais que ton test ligne 12 était bon ; en fait j'étais trompé par une autre ligne de test que j'avais laissée, mais si je l'enlève, plus rien, donc finalement, pas bon...:(
J'ai essayé 2 versions que j'avais sous la main :
1-
Code:
1
2
3
4
5
6
7
8
9 $samgrsource = ((Get-ADGroup -Filter {name -eq $groupsource} -Server "gad.schneider-electric.com").sAMAccountName) $samgrdest = ((Get-ADGroup -Filter {name -eq $groupdest} -Server "gad.schneider-electric.com").sAMAccountName) Get-ADGroupMember -Identity $samgrsource -Server "gad.schneider-electric.com" | foreach { if (get-aduser -filter {SamAccountName -eq $_.SamAccountName -and Enabled -eq $true} -Server "gad.schneider-electric.com") { Add-ADGroupMember -Identity $samgrdest -members $_ -Server "gad.schneider-electric.com"; $_.name } }
2-
Code:
1
2
3
4
5
6
7
8 $samgrsource = ((Get-ADGroup -Filter {name -eq $groupsource} -Server "gad.schneider-electric.com").sAMAccountName) $samgrdest = ((Get-ADGroup -Filter {name -eq $groupdest} -Server "gad.schneider-electric.com").sAMAccountName) Get-ADGroupMember -Identity $samgrsource -Server "gad.schneider-electric.com" | foreach { if (get-aduser -Properties memberof -filter {enabled -eq $true -and MemberOf -like $samgrsource} -server "gad.schneider-electric.com") { Add-ADGroupMember -Identity $samgrdest -members $_ -Server "gad.schneider-electric.com"; $_.name } }
vois-tu quelque chose ?
Bonjour,
même si je patiente, je crains que celui qui m'a demandé ce script (demain y aura 2 mois) en ai un peu assez. Je dois faire le point jeudi prochain et le soir, pars pour 3 semaines de congés, donc ça serait bien d'avoir quelque chose à lui montrer...
Comme je maîtrise mieux le script n°1 que le 2, je travaille sur le premier.
Pour valider la copie, j'ai supprimé la condition "enabled"
Mais y a rien qui s'affiche donc rien de copié :(Code:
1
2
3
4
5 Get-ADGroupMember -Identity $samgrsource -Server "gad.schneider-electric.com" | foreach { if (get-aduser -filter {SamAccountName -eq $_.SamAccountName} -Server "gad.schneider-electric.com") { Add-ADGroupMember -Identity $samgrdest -members $_ -Server "gad.schneider-electric.com"; $_.name } }
EDIT essai de 23h25 : si je supprime le test de la ligne 2, au lieu d'ajouter les membres dans le groupe, il affiche N fois la ligne 3...
La nuit porte conseil car hier soir, j'avais laissé les accolades entourant le contenu du test, pensant, comme en PHP, que c'était neutre mais ce matin, j'ai pensé à les enlever et la copie se fait bien du coup :)
Donc, c'est le filtre -filter {SamAccountName -eq $_.SamAccountName} qui ne va pas. Comment afficher les valeurs ? Car $_.SamAccountName, pas de problème, mais la première ?
Sinon, je viens de penser à tester le code n°2 en enlevant le filtre enabled :
et il fonctionne :) (contrairement au code n°1) par contre je n'arrive pas à comprendre comment agit ce memberof. Peux-tu m'expliquer ?Code:
1
2
3
4
5
6
7
8 $samgrsource = ((Get-ADGroup -Filter {name -eq $groupsource} -Server "gad.schneider-electric.com").sAMAccountName) $samgrdest = ((Get-ADGroup -Filter {name -eq $groupdest} -Server "gad.schneider-electric.com").sAMAccountName) Get-ADGroupMember -Identity $samgrsource -Server "gad.schneider-electric.com" | foreach { if (get-aduser -Properties memberof -filter {MemberOf -like $samgrsource} -server "gad.schneider-electric.com") { Add-ADGroupMember -Identity $samgrdest -members $_ -Server "gad.schneider-electric.com"; $_.name } }
salut laurentsc
voir que tu a travaillais ce week end !
je vois pas trop de quel premiere valeur tu parle, si ce n'est le SamAccountName du filtre -filter {SamAccountName -eq $_.SamAccountName}Citation:
Comment afficher les valeurs ? Car $_.SamAccountName, pas de problème, mais la première ?
le premier "SamAccountName" correspond a l'attribut dans l'AD comparais (le -eq) avec la variable $_.SamAccountName
comme dans la réponse précédente "memberof" est un attribut de l'AD qui contient la liste des groupes d'un utilisateur, le filtre va donc regarder dans tous les utilisateurs lesquels contiennent le groupe recherche ce qui peut être long, voir très longCitation:
par contre je n'arrive pas à comprendre comment agit ce memberof. Peux-tu m'expliquer ?
ce n'est donc pas une bonne idée de faire une recherche ce genre de chose dans une boucle !!!!
de plus, il ne te sert à rien de verifier si l'utilisateur ce trouve dans le groupe puisque que c'est le groupe qui te donne la liste des utilisateurs membres !!!
tu peut donc enlever le "if (get-aduser..." sauf pour verifier si l'utilisateur est enabled !!!
tu rajoutera le "where {Enabled -eq $true}" quand tu sera sur que tous fonctionne bien !!Code:
1
2
3
4
5
6
7
8 $samgrsource = ((Get-ADGroup -Filter {name -eq $groupsource} -Server "gad.schneider-electric.com").sAMAccountName) $samgrdest = ((Get-ADGroup -Filter {name -eq $groupdest} -Server "gad.schneider-electric.com").sAMAccountName) Get-ADGroupMember -Identity $samgrsource -Server "gad.schneider-electric.com" | foreach { if (get-aduser -identity $_ -Server "gad.schneider-electric.com" | where {$_.Enabled -eq $true}) { Add-ADGroupMember -Identity $samgrdest -members $_ -Server "gad.schneider-electric.com"; $_.name } }
quel est le serveur AD le plus proche de toi (sur le même site que toi)Citation:
Quelle précision dois-je demander à l'administrateur AD ?
tu n'a rien a toucher ici !!!Citation:
Quand je vais sur l'outil "Utilisateurs et ordinateurs AD" et je fais "changer de contrôleur de domaine", ça m'en propose 25 avec pour chacun le site, dont 6 en France et d'autres aux US, en Chine, en Allemagne et je sais pas où pour les autres.
le nom du serveur doit être utilisé dans les commandes de PowerShell
- il faut que tu utilise avec l'option SERVER, le serveur le plus proche de toi,
par exemple : Get-ADUser -filter ..... -Server "server-FranceAD1.eur.gad.schneider-electric.com"
Je m'apprêtais à répondre hier soir sauf que des invités sont arrivés plus tôt que prévu...
Même hier, vu que je suis à temps partiel et ne devrais pas travailler lundi, mais quand on aime, on compte pas !Citation:
voir que tu a travaillais ce week end !
Oui, je parlais effectivement de l'attribut dans l'AD, donc pas moyen d'afficher sa valeur pour vérifier le filtre ?Citation:
je vois pas trop de quel premiere valeur tu parle, si ce n'est le SamAccountName du filtre -filter {SamAccountName -eq $_.SamAccountName}
le premier "SamAccountName" correspond a l'attribut dans l'AD comparais (le -eq) avec la variable $_.SamAccountName
Pas ce matin (sur le site contrairement à hier)Citation:
et il fonctionne (contrairement au code n°1) (post #46)
Si j'enlève tout test, la copie s'effectue bien par contre même avec le test basique if (get-aduser -identity $_ -Server "gad.schneider-electric.com"Citation:
de plus, il ne te sert à rien de verifier si l'utilisateur ce trouve dans le groupe puisque que c'est le groupe qui te donne la liste des utilisateurs membres !!!
tu peut donc enlever le "if (get-aduser..." sauf pour verifier si l'utilisateur est enabled !!!
Citation:
get-aduser : Une référence a été renvoyée par le serveur
Dans l'outil "Utilisateurs et ordinateurs AD"Citation:
Oui, je parlais effectivement de l'attribut dans l'AD, donc pas moyen d'afficher sa valeur pour vérifier le filtre ?
ou via la commande get-aduser
bizarre comprend pas l'erreur peut être encore le problème du NameCitation:
get-aduser : Une référence a été renvoyée par le serveur
essai comme ça
Code:
1
2
3
4
5
6
7
8 $samgrsource = ((Get-ADGroup -Filter {name -eq $groupsource} -Server "gad.schneider-electric.com").sAMAccountName) $samgrdest = ((Get-ADGroup -Filter {name -eq $groupdest} -Server "gad.schneider-electric.com").sAMAccountName) Get-ADGroupMember -Identity $samgrsource -Server "gad.schneider-electric.com" | foreach { if (get-aduser -filter {SamAccountName -eq $_.SamAccountName} -Server "gad.schneider-electric.com" | where {$_.Enabled -eq $true}) { Add-ADGroupMember -Identity $samgrdest -members $_ -Server "gad.schneider-electric.com"; $_.name } }
Pas trouvé dans l'outil ni comment faire avec get-aduser. Peux-tu préciser ?Citation:
Dans l'outil "Utilisateurs et ordinateurs AD"
ou via la commande get-aduser
Sinon, j'ai essayé ton code : plus de message d'erreur mais pas de copie...
Evidemment, j'ai enlevé le where
Pièce jointe 297221Pièce jointe 297222Citation:
Pas trouvé dans l'outil
résultat ligne 10Citation:
comment faire avec get-aduser
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 get-aduser test DistinguishedName : CN=Test,OU=OUTEST,DC=domaine,DC=lan Enabled : False GivenName : test Name : Test ObjectClass : user ObjectGUID : ace7bee9-7c94-4f0c-a5a9-908caae0b70e SamAccountName : test SID : S-1-5-21-631892985-3984632572-265091654-5240 Surname : Test UserPrincipalName : test@domaine.lan
peut tu vérifier si ça te renvoie quelque chose et si c'est bien ce que tu veuxCitation:
j'ai essayé ton code : plus de message d'erreur mais pas de copie...
Code:Get-ADGroupMember -Identity $samgrsource -Server "gad.schneider-electric.com" | select ObjectClass, DistinguishedName
A la bourre. Réponse vers 18h30...
Mais je n'avais pas précisé de quel jour...:mouarf:Citation:
Réponse vers 18h30...
OK pour trouver l'info avec l'outil, mais je préfère utiliser get-aduser pour pouvoir le faire par programme et je ne sais transposer ton exemple dans mon script. Tu peux m'aider ?
La ligne de code donne bien une grande liste de réponses. Les valeurs pour les DistinguishedName sont correctes par contre pour les ObjectClass il y a en général 4 valeurs, et ça ne retourne que la dernière...
pour faire un verifications, normalement on prend un utilisateur qui ce trouve dans le premier groupe et on vérifie si il ce trouve dans le deuxième !Citation:
Comment afficher les valeurs ? Car $_.SamAccountName, pas de problème, mais la première ?
.....
je préfère utiliser get-aduser pour pouvoir le faire par programme et je ne sais transposer ton exemple dans mon script. Tu peux m'aider ?
tous les SamAccountName sorte de l'AD !!!
sinon dans ta boucle tu affiche le contenue de SamAccountName comme ça :
j'ai mis en commentaire l'ajout pour ce test contrôle
ça écrit en vert le SamAccountName source, le Maganta pour ObjectClass
si utilisateur doit etre copier ça ecrit en blanc le SamAccountName utilisé en destination et en jaune le name
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 $samgrsource = ((Get-ADGroup -Filter {name -eq $groupsource} -Server "gad.schneider-electric.com").sAMAccountName) $samgrdest = ((Get-ADGroup -Filter {name -eq $groupdest} -Server "gad.schneider-electric.com").sAMAccountName) Get-ADGroupMember -Identity $samgrsource -Server "gad.schneider-electric.com" | foreach { Write-Host $_.SamAccountName"`t " -NoNewline -ForegroundColor Green Write-Host $_.ObjectClass"`t " -NoNewline -ForegroundColor Magenta if (get-aduser -filter {SamAccountName -eq $_.SamAccountName} -Server "gad.schneider-electric.com" | where {$_.Enabled -eq $true} ) { # Add-ADGroupMember -Identity $samgrdest -members $_ -Server "gad.schneider-electric.com" Write-Host $_.SamAccountName"`t " -NoNewline -ForegroundColor White Write-Host $_.Name -NoNewline -ForegroundColor Yellow } Write-Host "" }
tu ne devrait avoir que des User d'après ce que tu m'a dis !Citation:
pour les ObjectClass il y a en général 4 valeurs, et ça ne retourne que la dernière...
quels sont les autres valeurs ?
edit : correction cette partie de code
| where {$_.Enabled -eq $true}
Désolé de répondre que maintenant mais en fin de matinée, pas là, et en début d'après-midi, forum HS...(et commencé puis oublié de finir pendant plusieurs heures :aie:)
Ce que tu affiches dans ton code, ce sont les variables $_.SamAccountName et pas le SamAccountName de l'AD ! (ce que je dis n'a peut-être aucun sens)
On ne passe jamais dans le if vu qu'aucun affichage en blanc ni en jaune...(avec ou sans where)
Les autres valeurs de ObjectClass (vu avec l'outil) sont top, person, organizationalPerson.
la valeur de $_.SamAccountName , c'est la valeur de SamAccountName sauf si tu la modifie dans ton codeCitation:
Ce que tu affiches dans ton code, ce sont les variables $_.SamAccountName et pas le SamAccountName de l'AD ! (ce que je dis n'a peut-être aucun sens)
dans le code get-aduser -filter [$_.SamAccountName -eq SamAccountName }, on demande de retrouver un utilisateur qui à la valeur $_.SamAccountName,
la valeur de $_.SamAccountName vient de la commande Get-ADGroupMember juste avant, donc elle existe dans le domaine AD !
top, person, organizationalPerson sont des valeur interne au fonctionnement du LDAPCitation:
Les autres valeurs de ObjectClass (vu avec l'outil) sont top, person, organizationalPerson.
en règle générale les commande du module AD renvoie ces valeurs pour ObjectClass : user, group, computer, organizationalUnit
Pas vu ta réponse ce matin...
En fin de compte, c'est que je souhaite, c'est ne faire la copie que les utilisateurs pour lesquels enabled est à true. Comme le filtre sur Get-ADUser ne marche pas, j'ai essayé autre chose :
mais là,Code:$enabled=Get-ADUser -properties * | Where-Object { $_.Enabled -eq '$true' }
???Citation:
cmdlet Get-ADUser at command pipeline position 1
Supply values for the following parameters:
(Type !? for Help.)
Filter: ?
Get-ADUser : Erreur lors de l’analyse de la requête*: «*?*» Message d’erreur*: «*syntax error*» à la position*: «*1*».
etc
le même code mais tu affiche en plus en rouge état de Enabled (False ou True) :Citation:
mais là, de nouveau, $enabled reste vide
Le résultat que tu devrais avoir :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 $samgrsource = ((Get-ADGroup -Filter {name -eq $groupsource} -Server "gad.schneider-electric.com").sAMAccountName) $samgrdest = ((Get-ADGroup -Filter {name -eq $groupdest} -Server "gad.schneider-electric.com").sAMAccountName) Get-ADGroupMember -Identity $samgrsource -Server "gad.schneider-electric.com" | foreach { Write-Host $_.SamAccountName"`t " -NoNewline -ForegroundColor Green Write-Host $_.ObjectClass"`t " -NoNewline -ForegroundColor Magenta Write-Host (get-aduser -filter {SamAccountName -eq $_.SamAccountName} -Server "gad.schneider-electric.com").Enabled"`t " -NoNewline -ForegroundColor Red if (get-aduser -filter {SamAccountName -eq $_.SamAccountName} -Server "gad.schneider-electric.com" | where {$_.Enabled -eq $true} ) { # Add-ADGroupMember -Identity $samgrdest -members $_ -Server "gad.schneider-electric.com" Write-Host $_.SamAccountName"`t " -NoNewline -ForegroundColor White Write-Host $_.Name -NoNewline -ForegroundColor Yellow } Write-Host "" }
evdupond user False evdupond Evelyne Dupond
paschmith user True paschmith Pauline SCHMITH
jodelamiria user True jodelamiria José DELA MARIA
Gr_COMMERCIAL group
J'avais pas vu ton post #58 quand j'ai corrigé mon post #57...Du coup, j'ai testé ton code et y a du vert et du magenta mais pas de rouge, blanc ni jaune (pareil en enlevant la clause where)
peut tu regarder tes message privé stp