Question [Résolu] Script modification attributs AD

Plus d'informations
il y a 7 ans 11 mois #25315 par gaudefroy
Bonjour,

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.

Plus d'informations
il y a 7 ans 11 mois #25317 par Quentin
Bonjour,

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 \&quot;SamAccountName -like '$($user.samaccountname)'\&quot;`
-Properties * -SearchBase \&quot;chemin de l'OU ou se trouvent les utilisateurs\&quot; |
Set-Aduser -replace @{Company=\&quot;$user.Company\&quot;;Department=\&quot;$user.Department\&quot;;Description=\&quot;$user.Description\&quot;;Office=\&quot;$user.Office}
}
[/code:1]

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 ans 11 mois #25318 par gaudefroy
Merci pour ton aide Whitatrax

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. :S

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.

Plus d'informations
il y a 7 ans 11 mois #25319 par Philippe
salut como10 et Whitatrax
bienvenue à vous :)

Après je ne sais pas s'il y a une solution meilleurs qu'une autre.

vos deux solution fonctionne, bien que celle de Whitatrax est plus compliquer mais indispensable pour des attributs non prevue dans Set-ADUser
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 :

'ai créé un script ci dessous qui ne me retourne aucune erreur mais qui ne modifie pas les champs voulus sur mon utilisateurs

ça indique souvant qu'il n'execute pas le Set-ADUser
normal le filtre n'est pas bon !! \&quot;SamAccountName -like '$($user.samaccountname)'\&quot;
les apostrophes empêche la convertion de la variable $user.samaccountname en valeur (login du l'utilisateur) :ohmy:
il te faut remplacer les apostrophes par des guillemets et bien sur les guillemets déjà present par autre chose, des accolades !
{SamAccountName -like \&quot;$($user.samaccountname)\&quot;}
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 \&quot;$($user.samaccountname)\&quot;} -SearchBase \&quot;chemin de l'OU ou se trouvent les utilisateurs\&quot; |
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.

Plus d'informations
il y a 7 ans 11 mois #25320 par gaudefroy
Merci 6ratgus pour ta réponse effectivement cela marche bien mieux.
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 = \&quot;C:\users\administrateur\Desktop\Modif_users.csv\&quot;

$users = Import-Csv -Path $csvfile -delimiter \&quot;;\&quot;


foreach ($user in $users) {

$usersearch = Get-ADUser -Filter {SamAccountName -like \&quot;$($user.samaccountname)\&quot;} -SearchBase \&quot;chemin de l'OU\&quot;

if ($usersearch -eq $null) {
write-host \&quot;l'utilisateur \&quot;$user.samaccountname\&quot; n'existe pas\&quot;

}
else {
Set-ADUser -Company $($user.Company) `
-Department $($user.Department) `
-Description $($user.Description) `
-office $($user.office)
Write-Host \&quot;Compte modifié pour \&quot;$user.samaccountname\&quot;\&quot;
}
}[/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.

Plus d'informations
il y a 7 ans 11 mois #25321 par Philippe

Comment puis je intégrer un contrôle préalable à la modification d'un utilisateur.

c'est exactement ce que tu a fais B)

[code:1]$usersearch = Get-ADUser -Filter {SamAccountName -eq \&quot;aaaaaa\&quot;} # 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

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 ?

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 pas
par contre il faut le géré comme tu la fais

Mais cela ne marche pas
il doit y avoir des erreur de syntaxes et de méthode j'imagine. Peux tu m'eclairer.

comme je ne vois aucune erreur dans ton script, je sais pas quoi te dire

si tu simplifie ton script pour les tests tu devrais vois le bon resultat :
[code:1]$users = \&quot;como10\&quot;, \&quot;aaaaaa\&quot; 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 \&quot;l'utilisateur $user n'existe pas\&quot;
}

else {
Write-Host \&quot;Compte modifié pour $user\&quot;
}
}
# 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.

Temps de génération de la page : 0.071 secondes
Propulsé par Kunena