Powershell utilisation de paramètres

Powershell utilisation de paramètres - Shell/Batch - Programmation

Marsh Posté le 14-05-2008 à 10:40:29    

Bonjour tout le monde,
 
je voudrais pourvoir utiliser des paramètres pour un de mes scripts powershell,
 
j'ai déjà trouvé comment utiliser des paramètres avec  
 

Code :
  1. Param ([string]$strVariable)


 
et ensuite je lance depuis executer :

powershell.exe -noexit  C:\test.ps1  -strVariable test

 
 
Ce que je cherche à faire c'est utiliser mes paramètres sous cette forme :
 
nomduscript.ps1 /P:paramètre1 /P2:paramètre2
 
Je ne sais pas comment définir (dans le code) P et P2
ni comment utiliser mes paramètres avec le /
 
Merci pour votre aide

Reply

Marsh Posté le 14-05-2008 à 10:40:29   

Reply

Marsh Posté le 27-02-2009 à 14:21:04    

ça pourra servir à quelqu'un un jour :
 
les paramètres dans powershell c'est  
 

Code :
  1. monscript.ps1 <-param1> valeur_param1 <-param2> valeur_param2


 
# on est pas obligé de spécifier le nom du paramètre


Message édité par canardtichaud le 27-02-2009 à 14:21:53

---------------
[>_] Microsoft 'PoSH'  addicted
Reply

Marsh Posté le 30-07-2009 à 12:22:21    

pour récupérer les paramètres dans le script il faut faire un $param1 = $args[0]
Par contre, j'ai un paramètre c'est une phrase. Je l'ai mise entre guillemets en pensant qu'il prendrait tout mais il se contente du premier mot. :)
Quelqu'un a une solution ?
merci :)


---------------
Site photo
Reply

Marsh Posté le 30-07-2009 à 12:31:12    

trouvé :D
il faut utiliser un caractère d'échappement ` (altgr et touche 7 sur un clavier francais) juste avant l'espace pour qu'il ne soit pas pris en compte par power shell ;)


---------------
Site photo
Reply

Marsh Posté le 04-03-2018 à 10:48:44    

Desoler de remonter le sujet, mais j'ai un problème similaire
 
mon powershell est appelé via un .bat
 
en parametre du .bat je balance un fichier (recuperer dans le .bat par %1)
 
dans le .bat, j'arrive bien a recuperer le nom de fichier avec des espace
mais une fois passé en parametre du powershell, il prend que la première partie.
 
le  .bat

Code :
  1. @echo off
  2. set ps_script="D:\test\test.ps1"
  3. echo Parametre : "%1"
  4. echo Lancement du script powershell
  5. echo ------------------------------
  6. powershell -noprofile -executionpolicy unrestricted -file "%ps_script%" -file "%1"
  7. echo ------------------------------
  8. exit


 
le powershell

Code :
  1. Param(
  2. [String]$file
  3. )
  4. write-host "Fichier : $file"


 
quand le fichier a un nom sans espace, pas de problème, si y'en a, ca marche plus
 
exemple avec les fichier "toto.txt" et "toto toto.txt"
 
fichier "toto.txt"

Code :
  1. Parametre : "D:\test\toto.txt"
  2. Fichier : D:\test\toto.txt
  3. Appuyez sur une touche pour continuer...


 
fichier "toto toto.txt"

Code :
  1. Parametre : ""D:\test\toto toto.txt""
  2. Fichier : D:\test\toto
  3. Appuyez sur une touche pour continuer...


 
une idée de comment résoudre ce soucis ?


Message édité par chico008 le 04-03-2018 à 10:49:26

---------------
Serveur HFR - OpenTTD
Reply

Marsh Posté le 05-03-2018 à 10:07:30    

avec le echo off en moins on peut voir :
 
E:\>powershell -noprofile -executionpolicy unrestricted -file ""e:\test\test.ps1"" -file "D:\test\toto.txt"
E:\>powershell -noprofile -executionpolicy unrestricted -file ""e:\test\test.ps1"" -file "D:\test\toto"
 
donc le problème se situe dans le batch, ou plutôt son appel
 

Citation :

en parametre du .bat je balance un fichier (recuperer dans le .bat par %1)


c'est la qu'il faut agir, met des "" autour du nom de ce fichier quand tu lances le .bat
 
je pense que c'est juste un accident si ton echo Parametre : "%1" fonctionne avec un espace  (car il y a rien après ?)
 
lancer un bat revient à appeler cmd.exe hors il respecte cette règle :

Citation :

Le code de terminaison traite correctement les noms de fichiers contenant des
espaces ou d’autres caractères spéciaux, en plaçant des guillemets autour des
chemins correspondants. Si vous reculez le curseur et appelez ensuite la
terminaison, le texte à droite du curseur lorsque la terminaison est demandée
est ignoré.
 
Les caractères spéciaux qui requièrent des guillemets sont :
     <espace>
     &()[]{}^=;!'+,`~


 
il y en a une autre avec les "" et certains arguments de cmd, a voir avec un cmd /?

Message cité 1 fois
Message édité par Feunoir le 05-03-2018 à 10:08:01
Reply

Marsh Posté le 05-03-2018 à 12:25:01    

Feunoir a écrit :

avec le echo off en moins on peut voir :
 
E:\>powershell -noprofile -executionpolicy unrestricted -file ""e:\test\test.ps1"" -file "D:\test\toto.txt"
E:\>powershell -noprofile -executionpolicy unrestricted -file ""e:\test\test.ps1"" -file "D:\test\toto"
 
donc le problème se situe dans le batch, ou plutôt son appel


 
Euh tu le sors d'ou le E: ?
 
Car du coup tu dit que le problème se site a ce niveau la, mais moi j'ai pas d'erreur, sinon ce serait l'appel au script qui foire, hors il se lance.
 
et comme tu peut le voir, le paramètre %1 est deja entre ""
c'est quand on passe dans le powershell que le paramètre s'arrete au 1er espace.


---------------
Serveur HFR - OpenTTD
Reply

Marsh Posté le 05-03-2018 à 21:14:28    

chico008 a écrit :


 
Euh tu le sors d'ou le E: ?
 
Car du coup tu dit que le problème se site a ce niveau la, mais moi j'ai pas d'erreur, sinon ce serait l'appel au script qui foire, hors il se lance.
 
et comme tu peut le voir, le paramètre %1 est deja entre ""
c'est quand on passe dans le powershell que le paramètre s'arrete au 1er espace.


ca vient de mon essai, j'avais pas de d: donc j'ai fait le test du e: :D  
 
vire ton @echo off du début , remplace exit par pause, tu verras l'appel des commandes une par une => le powershell a la version tronquée qui s’arrête à l'espace et donc te donne comme résultat la version tronquée
 
essaye de mettre 2 lignes echo Parametre : "%1"  il y a des chances que la deuxième foire
ou essaye de faire une affectation de ton %1 avec un set cela ne marchera probablement pas non plus s'il y a un espace dans l'argument et pas de "" autour dans l'appel du batch
 
un appel de d:\toto.bat truc.txt fonctionnera toujours mais cmd.exe n'accepte les espaces que dans des "" , donc a mon avis c'est presque de la chance si ton echo Parametre : "%1" fonctionne  
avec un appel d:\toto.bat "les trucs.txt"  le script fonctionnera entièrement et tout le temps  
 
(car  en fait echo Parametre : "%1" ne fonctionne pas tout le temps chez moi s'il y a un espace sans "" dans l'appel, faut parfois que je rouvre un cmd.exe pour que cela remarche, cela a marché chez mes parents, chez moi mon dernier essai n'a pas marché )


Message édité par Feunoir le 05-03-2018 à 21:20:05
Reply

Marsh Posté le 06-03-2018 à 08:46:23    

je vais essayer de voir ca cet aprem.


---------------
Serveur HFR - OpenTTD
Reply

Marsh Posté le 06-03-2018 à 09:03:38    

C'est dans le bat que ça coince, il faut pas mettre les cotes à la fin de la ligne powershell :
 
powershell -noprofile -executionpolicy unrestricted -file "%ps_script%" -file %1


---------------

Reply

Marsh Posté le 06-03-2018 à 09:03:38   

Reply

Marsh Posté le 06-03-2018 à 11:03:50    

j'ai essayé avec et sans, meme problème


---------------
Serveur HFR - OpenTTD
Reply

Marsh Posté le 06-03-2018 à 15:47:09    

Ah ben étonnant ça , j'ai pas le même comportement sur mon pc ( Win7) ça fonctionne comme indiqué


---------------

Reply

Marsh Posté le 06-03-2018 à 16:32:27    

C'est bien le powershell qui ne prend pas le parametre, j'ai virer le echo off, et voila

Code :
  1. D:\test>echo Parametre : ""D:\test\toto toto.txt""
  2. Parametre : ""D:\test\toto toto.txt""
  3. D:\test>powershell -noprofile -executionpolicy unrestricted -file "test.ps1" -file ""D:\test\toto toto.txt""
  4. Fichier : D:\test\toto
  5. D:\test>pause
  6. Appuyez sur une touche pour continuer...


---------------
Serveur HFR - OpenTTD
Reply

Marsh Posté le 19-03-2018 à 12:49:20    

toujours pas de solution ?


---------------
Serveur HFR - OpenTTD
Reply

Marsh Posté le 22-03-2018 à 15:49:28    

vu que tu as lancé le batch avec "toto toto.txt" tu as correctement :
D:\test>powershell -noprofile -executionpolicy unrestricted -file "test.ps1" -file ""D:\test\toto toto.txt""  
mais du coup cela fait ""D:\test\toto toto.txt""  
chez mes parents le script powershell marchait bien mais chez moi non (bizarrement les 2 sont en win10 1709)  
 
par contre une ligne de commande powershell -noprofile -executionpolicy unrestricted -file "test.ps1" -file "D:\test\toto toto.txt" fonctionne chez moi
 
donc suffit dans mon cas de remplacer dans le batch le
powershell -noprofile -executionpolicy unrestricted -file "%ps_script%" -file "%1"
par
powershell -noprofile -executionpolicy unrestricted -file %ps_script% -file %1
et de lancer ce batch via un "toto toto.txt"
cela donnera à l"exécution une ligne de commande powershell plus correct (vu que les paramètres ont déjà des "" )
powershell -noprofile -executionpolicy unrestricted -file "D:\test\test.ps1" -file "toto toto.txt"
 
et la j'obtiens bien lors de l'execution chez moi  

Citation :

D:\>powershell -noprofile -executionpolicy unrestricted -file "D:\test\test.ps1" -file "toto toto.txt"
Fichier : toto toto.txt


Message édité par Feunoir le 22-03-2018 à 15:57:01
Reply

Marsh Posté le 24-03-2018 à 08:29:53    

Etrange, car j'ai voulu modifier mon .bat original avec le meme code que celui que j'ai testé et qui marchait, ca voulait toujours pas.
 
J'ai tout refait en utilisant notepad++, la ca passe
peut etre un codage ascii different entre le bloc note et notepad ++ ?
 
car entre ce que j'ai refait, et ce que j'avais, mon code est identique, mais le refait marche, l'ancien marche pas
 
bon, on va dire que c'est resolu
 
edit : bon, j'ai remis le script au meme endroit que l'autre et tout, autant les tests marchaient, bah la ca re marche plus, il tronque les espace, et maintenant des le echo dans le .bat c'est tronqué.
 
Bon, je remet mon code de tout car je pige plus rien
 
le .bat

Code :
  1. @echo off
  2. echo Parametre : "%1"
  3. powershell -noprofile -executionpolicy unrestricted -file D:\depla_fic\depla_fic.ps1 -fichier %1
  4. pause
  5. exit


 
le .ps1

Code :
  1. Param(
  2. [String]$fichier
  3. )
  4. write-host "Fichier : $fichier"
  5. $wdir="D:\depla_fic"
  6. $dest_dir="Y:\recep_fic\a traiter"
  7. write-host "fichier : $fichier"
  8. write-host "Test du dossier en destination : $dest_dir"
  9. if (Test-Path $dest_dir)
  10. {
  11.  write-host "OK : Copie du fichier"
  12.  move-item -path $fichier -destination $dest_dir
  13. }
  14. else {
  15.  write-host "Erreur : dossier $dest_dir indisponible"
  16.  write-host "Copie du fichier en local pour sauvegarde : $wdir"
  17.  move-item -path $fichier -destination $wdir
  18. }
  19. write-host "Fin"


 
Y: est un lecteur réseau
 
le resultat, en recuperant directement le fichier depuis firefox sur un site interne, le fichier s'appelle "SNORT DONE 20180324.xcsv"
quand je clic sur le fichier, je fait ouvrir avec xcsv_recep (c'est une association que j'ai fait un base de registre, pour que les fichier .xcsv s'ouvrent directement avec le .bat)

Code :
  1. Parametre : "C:\Users\Chico\AppData\Local\Temp\SNORT"
  2. Fichier : C:\Users\Chico\AppData\Local\Temp\SNORT
  3. Test du dossier en destination : Y:\recep_fic\a traiter
  4. OK : Copie du fichier
  5. move-item : Impossible de trouver le chemin d'accès «
  6. C:\Users\Chico\AppData\Local\Temp\SNORT», car il n'existe pas.
  7. Au caractère D:\depla_fic\depla_fic.ps1:13 : 3
  8. +         move-item -path $fichier -destination $tor_dir
  9. +         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  10.     + CategoryInfo          : ObjectNotFound: (C:\Users\Chico\...SNORT:String) [Move-Item], ItemNotFoundExce
  11.    ption
  12.     + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.MoveItemCommand
  13. Fin
  14. Appuyez sur une touche pour continuer...


 
et la ou je pige encore moins, j'ai refait un fichier "toto toto.txt", je le fait glisser sur mon .bat, et la ca passe sans aucun soucis
 

Code :
  1. Parametre : ""D:\depla_fic\toto toto.txt""
  2. Fichier : D:\depla_fic\toto toto.txt
  3. Test du dossier en destination : Y:\recep_fic\a traiter
  4. OK : Copie du fichier
  5. Fin
  6. Appuyez sur une touche pour continuer...


 
et je retrouve bien mon fichier "toto toto.txt" a l'emplacement voulu
 
Si le fichier que je recupere depuis l'intranet n'a pas d'espace ca marche, mais y'a eut une maj d'un progiciel et maintenant ils foutent des espaces dans les noms (ces cons la, je sais)
mais la je pige plus rien, le code est en principe bon, mais en provenance d'un endroit ca va, et d'un autre, ca va plus :(


Message édité par chico008 le 24-03-2018 à 08:53:23

---------------
Serveur HFR - OpenTTD
Reply

Marsh Posté le 24-03-2018 à 09:16:58    

bon, vous allez rire (ou pas)
 
en fait le problème venait de mon association de fichier et de la commande, j'avait oublier d'y mettre les ""
 
pour l'assicioation, dans le registre, j'ai fait une clé .xcsv, et dedans je fais référence a xcsv_file
 
ensuite, clé xcsv_file, j'ai les clés suivantes :  
xcsv_file\shell\open\command
et ma valeur d'origine : D:\depla_fic\depla_fic.bat %1
modifié en D:\depla_fic\depla_fic.bat "%1", bah ca va mieux
 


---------------
Serveur HFR - OpenTTD
Reply

Sujets relatifs:

Leave a Replay

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