Question
[Résolu] Script modification attributs AD
- gaudefroy
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 32
- Remerciements reçus 0
Je souhaites faire un script qui me permettrais de modifier les attributs d'utilisateurs présent dans mon AD et en remplaçant les attributs par ceux qui sont indiqués dans mon fichier CSV. J'ai regardé sur internet et je trouve pleins de façon de faire. Par conséquent j'ai créé un script ci dessous qui ne me retourne aucune erreur mais qui ne modifie pas les champs voulus sur mon utilisateurs.
[code:1]Import-Module ActiveDirectory
$users = Import-Csv -Path C:\users\administrateur\Desktop\Modif_users.csv -delimiter \";\"
foreach ($user in $users) {
Get-ADUser -Filter \"SamAccountName -like '$($user.samaccountname)'\"`
-Properties * -SearchBase \"chemin de l'OU ou se trouvent les utilisateurs\" |
Set-ADUser -Company $($user.Company) `
-Department $($user.Department) `
-Description $($user.Description) `
-office $($user.office) `
}[/code:1]
Je ne comprends pas ou se situe le problème. Avez vous des indications à me donner ?
Merci d'avance<br><br>Message édité par: Arnaud, à: 13/05/19 10:17
Connexion ou Créer un compte pour participer à la conversation.
- Quentin
- Hors Ligne
- Membre senior
-
- Messages : 47
- Remerciements reçus 0
Je suis également un débutant en powershell, ce n'est pas forcément la bonne réponse, mais ça peut être une piste :
Pour le Set-AdUser, utilisez -replace pour modifier les champs AD voulus
Exemple :
[code:1]
foreach ($user in $users)
{
Get-ADUser -Filter \"SamAccountName -like '$($user.samaccountname)'\"`
-Properties * -SearchBase \"chemin de l'OU ou se trouvent les utilisateurs\" |
Set-Aduser -replace @{Company=\"$user.Company\";Department=\"$user.Department\";Description=\"$user.Description\";Office=\"$user.Office}
}
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- gaudefroy
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 32
- Remerciements reçus 0
En fait je crois que j'ai trouvé mon problème en fait je créé les script sur ISE et j'ai mis une ` après -office $($user.office) en trop.
ta solution est certainement aussi fonctionnelle car visiblement il existe plusieurs façon de faire des modifications d'utilisateurs dans l'AD.
Après je ne sais pas s'il y a une solution meilleurs qu'une autre.
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
- Messages : 1778
- Remerciements reçus 21
bienvenue à vous
vos deux solution fonctionne, bien que celle de Whitatrax est plus compliquer mais indispensable pour des attributs non prevue dans Set-ADUserAprès je ne sais pas s'il y a une solution meilleurs qu'une autre.
mais ce n'est pas le cas ici
pour ton script como10, souvent les problèmes viennent du contenu des fichiers CSV
assure toi que la premiere ligne contienne les nom de colonne utilisé comme propriété dans ton script (samaccountname, Company, Department, etc...) et qu'il soit bien séparer par des points virgules comme tu l'indique dans le délimiteur !
ceci dis il n'y a pas que ça :
ça indique souvant qu'il n'execute pas le Set-ADUser'ai créé un script ci dessous qui ne me retourne aucune erreur mais qui ne modifie pas les champs voulus sur mon utilisateurs
normal le filtre n'est pas bon !! \"SamAccountName -like '$($user.samaccountname)'\"
les apostrophes empêche la convertion de la variable $user.samaccountname en valeur (login du l'utilisateur)
il te faut remplacer les apostrophes par des guillemets et bien sur les guillemets déjà present par autre chose, des accolades !
{SamAccountName -like \"$($user.samaccountname)\"}
pour info -Properties * est completement inutile ici et ralentie le fonctionnement du script, en plus de charger le serveur !
au final ton code devrais ressembler a ceci :
[code:1]foreach ($user in $users) {
Get-ADUser -Filter {SamAccountName -like \"$($user.samaccountname)\"} -SearchBase \"chemin de l'OU ou se trouvent les utilisateurs\" |
Set-ADUser -Company $($user.Company) -Department $($user.Department) -Description $($user.Description) -Office $($user.office)
}
[/code:1]
Message édité par: 6ratgus, à: 17/04/18 11:37<br><br>Message édité par: 6ratgus, à: 17/04/18 11:38
Connexion ou Créer un compte pour participer à la conversation.
- gaudefroy
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 32
- Remerciements reçus 0
Par contre je voulais inclure aussi une vérification que le samaccoutname existe bien dans mon AD avant de tenter la modification.
En effet je viens de faire un test en integrant un compte qui n'existe pas dans mon csv et il ne me retourne pas d'erreur. Est-ce normal ?
Comment puis je intégrer un contrôle préalable à la modification d'un utilisateur.
j'ai fait ceci:
Import-Module ActiveDirectory
[code:1]$csvfile = \"C:\users\administrateur\Desktop\Modif_users.csv\"
$users = Import-Csv -Path $csvfile -delimiter \";\"
foreach ($user in $users) {
$usersearch = Get-ADUser -Filter {SamAccountName -like \"$($user.samaccountname)\"} -SearchBase \"chemin de l'OU\"
if ($usersearch -eq $null) {
write-host \"l'utilisateur \"$user.samaccountname\" n'existe pas\"
}
else {
Set-ADUser -Company $($user.Company) `
-Department $($user.Department) `
-Description $($user.Description) `
-office $($user.office)
Write-Host \"Compte modifié pour \"$user.samaccountname\"\"
}
}[/code:1]
Mais cela ne marche pas
il doit y avoir des erreur de syntaxes et de méthode j'imagine. Peux tu m'eclairer.
Comme tu peux le voir je débutes en powershell !!
Merci pour la réponse sur developpez.com<br><br>Message édité par: como10, à: 17/04/18 14:03
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
- Messages : 1778
- Remerciements reçus 21
c'est exactement ce que tu a faisComment puis je intégrer un contrôle préalable à la modification d'un utilisateur.
[code:1]$usersearch = Get-ADUser -Filter {SamAccountName -eq \"aaaaaa\"} # ce login existe pas j'espère !
$usersearch -eq $null
# renvoie True
[/code:1]
comme tu le vois quand le compte n'existe pas get-aduer renvoie $null
par contre une petite amelioration, tu peut changer le like du filtre par un eq
c'est l'intérêt d'utilisé le filtre dans get-aduser, pour ne pas avoir de message d'erreur si l'utilisateur n'existe pasEn effet je viens de faire un test en integrant un compte qui n'existe pas dans mon csv et il ne me retourne pas d'erreur. Est-ce normal ?
par contre il faut le géré comme tu la fais
comme je ne vois aucune erreur dans ton script, je sais pas quoi te direMais cela ne marche pas
il doit y avoir des erreur de syntaxes et de méthode j'imagine. Peux tu m'eclairer.
si tu simplifie ton script pour les tests tu devrais vois le bon resultat :
[code:1]$users = \"como10\", \"aaaaaa\" mettre un compte qui existe et un qui n'existe pas
foreach ($user in $users) {
$usersearch = Get-ADUser -Filter {SamAccountName -eq $user}
if ($usersearch -eq $null) {
write-host \"l'utilisateur $user n'existe pas\"
}
else {
Write-Host \"Compte modifié pour $user\"
}
}
# resultat :
# Compte modifié pour como10
# l'utilisateur aaaaaa n'existe pas
[/code:1]<br><br>Message édité par: 6ratgus, à: 17/04/18 16:33
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu] Script modification attributs AD