Question Renommer et deplacer des users dans AD (Résolu)

Plus d'informations
il y a 16 ans 9 mois #699 par Jacques Barathon
Oui, c'est tout à fait possible en important un fichier CSV et en parcourant ses champs dans une boucle foreach.

Attention, si tu veux utiliser import-csv, il faut impérativement utiliser la virgule comme séparateur de champs dans ton fichier CSV sinon la lecture ne se fera pas correctement.

Exemple de fichier (utilisateurs.csv):

[code:1]
ancien,nouveau
brubru,petitjeana
linlin,robino
gigi,kentc[/code:1]
Exemple d'importation et de lecture dans une boucle:

[code:1]
$utilisateurs = import-csv utilisateurs.csv
$utilisateurs | foreach {
\"$($_.ancien) => $($_.nouveau)\"
}[/code:1]
Ca donne ça comme résultat:

[code:1]
brubru => petitjeana
linlin => robino
gigi => kentc[/code:1]
A toi de replacer $_.ancien et $_.nouveau aux bons endroits dans ton script existant :-).

Si ton CSV utilise des points-virgule et que c'est trop compliqué de les modifier (encore que, en un coup de -replace ça devrait le faire), voici une autre technique:

[code:1]
$utilisateurs = get-content utilisateurs.csv
$utilisateurs[1..($utilisateurs.length-1)] | foreach {
$ancien, $nouveau = $_.split(\";\"«»)
\"$ancien => $nouveau\"
}[/code:1]
Le résultat sera le même que pour le premier exemple. Attention, dans le deuxième exemple je suis obligé de parcourir $utilisateurs à partir de la 2e ligne à cause de la ligne d'en-tête qui m'est inutile.

Ce ne sont que quelques pistes, mais elles devraient te permettre de t'en sortir.

Janel<br><br>Message édité par: janel, à: 18/07/07 23:53

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

Plus d'informations
il y a 16 ans 9 mois #700 par Jacques Barathon
A propos de ta question sur l'utilisation de move-item, cette commandelette (comme ses copines get-item, get-childitem, copy-item, etc) ne marche qu'avec les éléments des espaces de noms exposés par des Providers dans PowerShell.

Pour voir la liste des Providers disponibles:

[code:1]get-psprovider[/code:1]
Pour chaque Provider on a la liste des disques qui l'utilisent. On retrouve cette correspondance mais dans l'autre sens quand on affiche la liste des lecteurs utilisables dans PowerShell:

[code:1]get-psdrive[/code:1]
Janel

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

Plus d'informations
il y a 16 ans 9 mois #701 par balek
alors, je vais esseyer ca !!
Ca a l'air tellement facile quand tu en parles.
Je tente de faire de modifier trois propriétés de plusieurs comptes utilisateurs dans une même OU. (userlogon (x2) et le nom du script de logon)
Mon chemin LDAP change et pointe uniquement sur l'OU \&quot;BR\&quot;.

[code:1]$objuser = [ADSI]\&quot;LDAP://ad-labo-europe1/ou=BR,dc=europe,dc=bibi,dc=com\&quot;
$objUser.put(\&quot;sAMAccountName\&quot;, \&quot;toto\&quot;«»)
$objUser.put (\&quot;userprincipalName\&quot;, \&quot;toto@europe.bibi.com\&quot;«»)
$objUser.put(\&quot;scriptPath\&quot;, \&quot;logonScript.vbs\&quot;«»)
$objUser.SetInfo()[/code:1]

Je cherche comment mettre ca en forme.

PS: ce fichier utilisateurs.csv doit etre placé à quel endroit ?

Merci bcp !!

Message édité par: balek, à: 19/07/07 10:19

Message édité par: balek, à: 19/07/07 12:21<br><br>Message édité par: balek, à: 19/07/07 12:22

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

Plus d'informations
il y a 16 ans 9 mois #702 par Jacques Barathon
L'endroit où le fichier est placé n'a pas grande importance. S'il est dans le répertoire où tu te trouves au moment où tu lances ton script, il suffit de passer le nom du fichier. S'il est dans un autre répertoire, il faudra passer le chemin complet. Par exemple:

[code:1]$utilisateurs = import-csv \&quot;c:\mes données\utilisateurs.csv\&quot;[/code:1]
Au passage, j'ai encadré le chemin avec des guillemets à cause de la présence d'espaces dans ce chemin. Les guillemets sont optionnels s'il n'y a pas d'espace.

Si je reprends le bout de code que tu avais fourni comme exemple hier, la moulinette donnerait à peu près ça:

[code:1]$utilisateurs = import-csv \&quot;c:\mes données\utilisateurs.csv\&quot;

$utilisateurs | foreach {
$objuser = [ADSI]\&quot;LDAP://ad-labo-europe1/cn=$($_.cn),ou=BR,dc=europe,dc=bibi,dc=com\&quot;
$objUser.put(\&quot;sAMAccountName\&quot;, $_.sAMAccountName)
$objUser.put(\&quot;userprincipalName\&quot;, $_.UserPrincipalName)
$objUser.SetInfo()
}[/code:1]
Cet exemple utilise import-csv, qui permet une lecture très simple d'un fichier CSV. En l'occurrence, cela suppose un fichier en entrée (utilisateurs.csv) qui a ce genre de tête:

[code:1]cn,sAMAccountName,UserPrincipalName
brubru,petitjeana,Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
linlin,robino,Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
gigi,kentc,Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.[/code:1]
Avec import-csv, l'important pour ce fichier est d'avoir:

1) la virgule comme séparateur de champs,

2) une ligne d'en-tête qui permet à PowerShell de donner un nom aux différents champs de chaque enregistrement (cn, sAMAccountName et UserPrincipalName). Tu pourras ensuite reprendre ce nom dans ton script pour chaque enregistrement: par exemple, $_.cn pour accéder au premier champ de l'enregistrement en cours.

Si l'une ou l'autre de ces conditions n'est pas remplie par ton fichier, il vaut mieux adopter l'autre solution que je proposais, c'est-à-dire lire le fichier avec get-content.

Dans ce cas, imaginons que ton fichier ait la tête suivante:

[code:1]cn;sAMAccountName;UserPrincipalName
brubru;petitjeana;Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
linlin;robino;Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
gigi;kentc;Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.[/code:1]
Tu remarqueras que la seule différence avec le premier fichier est que le séparateur est maintenant le point-virgule.

Dans ce cas-là, la moulinette devient plutôt qq chose comme ça:

[code:1]$utilisateurs = get-content \&quot;c:\mes données\utilisateurs.csv\&quot;

$utilisateurs[1..($utilisateurs.length-1)] | foreach {
$cn,$sAMAccountName,$UserPrincipalName = $_.split(\&quot;;\&quot;«»)
$objuser = [ADSI]\&quot;LDAP://ad-labo-europe1/cn=$cn,ou=BR,dc=europe,dc=bibi,dc=com\&quot;
$objUser.put(\&quot;sAMAccountName\&quot;, $sAMAccountName)
$objUser.put(\&quot;userprincipalName\&quot;, $UserPrincipalName)
$objUser.SetInfo()
}[/code:1]
A priori, d'après ton dernier post il faudra que tu remplaces les propriétés que j'utilise ici par celles que tu veux vraiment modifier.

Par contre, dans ton dernier post je vois que tu récupères une OU entière et que tu la traites comme un utilisateur. J'ai loupé qq chose ou c'est ton exemple qui était incomplet?

A ta dispo pour plus d'infos (si j'en ai bien sûr :)).

Janel

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

Plus d'informations
il y a 16 ans 8 mois #755 par balek
Ca marche !!!

Merci beaucoup pour tous ces conseils !!:)

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

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