Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1788 connectés 

  FORUM HardWare.fr
  Windows & Software
  Logiciels

  Problème avec une variable powershell

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème avec une variable powershell

n°3355958
vincentlez
Posté le 24-10-2019 à 18:38:51  profilanswer
 

Bonjour à tous,
 
J'ai un petit soucis avec powershell.  
J'essaye d'importer un CSV dans mon serveur (c'est un labo) mais j'ai un soucis avec une variable.
Dans mon script j'aimerais pouvoir préciser dans quelle OU seront les utilisateurs, selon leur service.
J'ai donc créer la variable "$ou_users" que j'ai mis en rouge dans le code.  
Mais j'ai un soucis. Lorsque je tente de lancer "new-aduser -name $fullname -Path $ou_users"  ça ne passe pas. J'ai le message suivant :
new-aduser : La syntaxe du nom de l’objet est incorrecte
Au caractère Ligne:1 : 1
+ new-aduser -name $fullname -Path $ou_users
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (CN=Carter WARRE...C=vcorp,DC=net":String) [New-ADUser], ADException
    + FullyQualifiedErrorId : ActiveDirectoryServer:8335,Microsoft.ActiveDirectory.Management.Commands.NewADUser

 
Mais lorsque j’exécute tout seul la variable $ou_users ça me donne "OU=users,OU=administratifs,OU=vcorp,DC=vcorp,DC=net" avec la bonne syntaxe et le nom que je veux.
Afin d'en être sûr j'ai donc exécuté $ou_users, copié ce que ça m'a donné puis directement collé dans ma commande.
Ce qui donne --> new-aduser -name $fullname -Path "OU=users,OU=administratifs,OU=vcorp,DC=vcorp,DC=net"
De cette manière cela fonctionne. La commande passe et mon utilisateur est créé dans la bonne OU.
Pouvez-vous me dire d'où ça pourrait venir ? Je n'arrive pas à trouver une solution, ni même pas comprendre ce qu'il se passe...
 
En espérant avoir été clair,
Merci d'avance pour vos réponses.  
Vincent
 
PS : Je vous met le script complet au cas où.
 
 
 

Code :
  1. #variables
  2. $ou_distinguishedname = "OU=vcorp,DC=vcorp,DC=net"
  3. $company = "vcorp".toupper()
  4. #importe de fichier csv créé précédemment
  5. $csvusers = import-csv "C:\Users\administrateur.VCORP\Documents\Powershell import utilisateur\users.csv" -delimiter ";"
  6. # boucle creation des users
  7.             foreach ($line in $csvusers) #création de la boucle
  8.             {
  9.             #variables
  10.             $prenom = $line.prenom
  11.             $prenom = (get-culture).textinfo.totitlecase($prenom)
  12.             $nom = $line.nom
  13.             $nom = $nom.toupper()
  14.             $fullname = ($prenom+" "+$nom)
  15.             $matricule = $line.matricule
  16.             $mail = ($prenom.Substring(0,1)+'.'+$nom+"@vcorp.net" ).tolower().replace(" ","" )
  17.             $service = $line.service
  18.             $service_user = (get-culture).textinfo.totitlecase($service)
  19.             $expiration = $null
  20.             $expiration = $line.expiration
  21.             $initiales = $prenom.substring(0,1)+$nom.substring(0,1)
  22.             $login = ($prenom+"."+$nom).replace(" ","" )
  23.             $ou_service = "OU="+$service+","+$ou_distinguishedname
  24.             $ou_users = '"'+"OU=users"+','+$ou_service+'"'.ToString()
  25.             $affichage = $prenom+" "+$nom
  26.             $password = $prenom.replace(" ","" )+"*"+$matricule
  27.             $password_secure = convertto-securestring -string $password -asplaintext -force
  28.          
  29.          
  30.             #creation des users
  31.             new-aduser -name $fullname -Path $ou_users -GivenName $prenom -Surname $nom -DisplayName $full -SamAccountName $login -AccountPassword $password_secure
  32.            
  33.                         #expiration de compte
  34.                         if ($expiration -notlike $null)
  35.                         {
  36.                         echo "Mon compte va expirer"
  37.                         $expiration_description = $expiration.tostring()
  38.                         set-aduser $login -accountexpirationdate $expiration -Description $expiration_description
  39.                         }


Message édité par vincentlez le 24-10-2019 à 18:47:15
mood
Publicité
Posté le 24-10-2019 à 18:38:51  profilanswer
 

n°3355962
Z_cool
HFR profile rating:⭐⭐⭐⭐
Posté le 24-10-2019 à 20:25:09  profilanswer
 

pourquoi ne pas poser ce topic dans la partie programmation du forum ?


---------------
#mais-chut
n°3355965
Ryo-Ohki
10th Rabbit
Posté le 24-10-2019 à 20:33:57  profilanswer
 

Je ne comprends pas le but du ToString() à la fin ? C'est déà une chaine que tu manipules...
 
Et aussi tu te compliques la tâche (je trouve) avec tes concaténations.
 
$ou_users = "OU=users,$ou_service" marchera aussi bien... (pareil ailleurs dans ton script d'ailleurs)
 
Si tu crains qu'il y ait des espaces dans les DN appelle le new-ADUser avec des double quotes autour des variables ça devrait suffire.

Message cité 1 fois
Message édité par Ryo-Ohki le 24-10-2019 à 20:36:53

---------------
The Lapin, reloaded  |  "Anything can happen in Formula One, and it usually does." -- Murray Walker
n°3355972
vincentlez
Posté le 24-10-2019 à 21:09:19  profilanswer
 

Ryo-Ohki a écrit :

Je ne comprends pas le but du ToString() à la fin ? C'est déà une chaine que tu manipules...
 
Et aussi tu te compliques la tâche (je trouve) avec tes concaténations.
 
$ou_users = "OU=users,$ou_service" marchera aussi bien... (pareil ailleurs dans ton script d'ailleurs)
 
Si tu crains qu'il y ait des espaces dans les DN appelle le new-ADUser avec des double quotes autour des variables ça devrait suffire.


 
Je t'avoue avoir un peu essayer toutes les façons de faire possible, au cas où un petit détail ferait que la variable ne marche pas...
Donc j'en suis arrivé au fur et à mesure de mes test à ça.
Au niveau des concaténations, j'applique ce qu'on m'a apprit! Mais merci pour l'info, j'y penserais ;)
 
Mais du coup, tu n'as pas de solution pour le réel problème ?

n°3355973
Ryo-Ohki
10th Rabbit
Posté le 24-10-2019 à 21:17:26  profilanswer
 

Ben l'idée c'était déjà de voir si avec une syntaxe moins alambiquée ça marchait mieux...
 
Je suis pas convaincu par le fait de mettre tes double quotes entre simples quotes, la simple quote va faire que ton caractère sera transcrit tel quel donc le DN résultant avec une double quote au milieu ne va pas aimer du tout, du tout...
 
D'ailleurs en regardant mieux ton message d'erreur on voit aussi une double quote qui traine à la fin, juste après DC=net (alors qu'il n'y en a pas au début du message d'erreur), à vue de nez c'est donc celle qui figure dans ta ligne rouge juste après ta variable $ou_users... C'est super moche.
 
Si t'es pas à l'aise avec le débuggeur de l'ISE utilise la méthode "du pauvre" (mais efficace!) et colle un Write-Host $ou_users juste après ta ligne rouge pour voir ce qu'elle contient... Je parie que tu affiches les double quotes.
 
EDIT : tiens test en deux secondes. Sur que c'est ça.
 
https://reho.st/medium/self/a8d63ef9552628da120ea43565e0338e030acfa5.png

Message cité 1 fois
Message édité par Ryo-Ohki le 24-10-2019 à 21:24:55

---------------
The Lapin, reloaded  |  "Anything can happen in Formula One, and it usually does." -- Murray Walker
n°3355976
vincentlez
Posté le 24-10-2019 à 22:02:54  profilanswer
 

Ryo-Ohki a écrit :

Ben l'idée c'était déjà de voir si avec une syntaxe moins alambiquée ça marchait mieux...
 
Je suis pas convaincu par le fait de mettre tes double quotes entre simples quotes, la simple quote va faire que ton caractère sera transcrit tel quel donc le DN résultant avec une double quote au milieu ne va pas aimer du tout, du tout...
 
D'ailleurs en regardant mieux ton message d'erreur on voit aussi une double quote qui traine à la fin, juste après DC=net (alors qu'il n'y en a pas au début du message d'erreur), à vue de nez c'est donc celle qui figure dans ta ligne rouge juste après ta variable $ou_users... C'est super moche.
 
Si t'es pas à l'aise avec le débuggeur de l'ISE utilise la méthode "du pauvre" (mais efficace!) et colle un Write-Host $ou_users juste après ta ligne rouge pour voir ce qu'elle contient... Je parie que tu affiches les double quotes.
 
EDIT : tiens test en deux secondes. Sur que c'est ça.
 
https://reho.st/medium/self/a8d63ef [...] 0acfa5.png


 
Ca fonctionne avec $ou_users = "OU=users,$ou_service" !!!
Merci beaucoup pour ton aide.
 
En fait les doubles quotes je faisais exprès de faire en sorte qu'elles apparaissent parce que en tapant à la main la ligne de commande new-aduser... -Path "DC..." ça ne marchait qu'avec les doubles quotes...
Je m'étais donc focalisé dessus.  
Merci beaucoup pour ton aide ! Problème résolu :)

n°3355980
Ryo-Ohki
10th Rabbit
Posté le 25-10-2019 à 06:27:07  profilanswer
 

Oui c'est toute la subtilité des double quotes en Powershell. A moins qu'il soient forcés via ton ancienne méthode, ou échappés avec un backquote, ils ne servent qu'à définir le contenu d'une chaine de caractère et sont retirés à l'exécution par l'interpréteur.
 
Content que ça marche :)


---------------
The Lapin, reloaded  |  "Anything can happen in Formula One, and it usually does." -- Murray Walker

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Windows & Software
  Logiciels

  Problème avec une variable powershell

 

Sujets relatifs
Problème périphériqueproblème installation win 10
Problème de son dans Windows 10Problème de dual boot
Problème accès sur les dossiers et répertoiresproblème bitlocker
Problème installation Windows 10Problème Éditeur de registre
Probleme activation office 2019 
Plus de sujets relatifs à : Problème avec une variable powershell


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR