Problème avec une variable powershell

Problème avec une variable powershell - Logiciels - Windows & Software

Marsh Posté le 24-10-2019 à 18:38:51    

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
Reply

Marsh Posté le 24-10-2019 à 18:38:51   

Reply

Marsh Posté le 24-10-2019 à 20:25:09    

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


---------------
#mais-chut
Reply

Marsh Posté le 24-10-2019 à 20:33:57    

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
Reply

Marsh Posté le 24-10-2019 à 21:09:19    

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 ?

Reply

Marsh Posté le 24-10-2019 à 21:17:26    

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
Reply

Marsh Posté le 24-10-2019 à 22:02:54    

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 :)

Reply

Marsh Posté le 25-10-2019 à 06:27:07    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed