Powershell utilisation de paramètres - Shell/Batch - Programmation
Marsh Posté le 27-02-2009 à 14:21:04
ça pourra servir à quelqu'un un jour :
les paramètres dans powershell c'est
Code :
|
# on est pas obligé de spécifier le nom du paramètre
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
Marsh Posté le 30-07-2009 à 12:31:12
trouvé
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
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 :
|
le powershell
Code :
|
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 :
|
fichier "toto toto.txt"
Code :
|
une idée de comment résoudre ce soucis ?
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 |
il y en a une autre avec les "" et certains arguments de cmd, a voir avec un cmd /?
Marsh Posté le 05-03-2018 à 12:25:01
Feunoir a écrit : avec le echo off en moins on peut voir : |
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.
Marsh Posté le 05-03-2018 à 21:14:28
chico008 a écrit : |
ca vient de mon essai, j'avais pas de d: donc j'ai fait le test du e:
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é )
Marsh Posté le 06-03-2018 à 08:46:23
ReplyMarsh 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
Marsh Posté le 06-03-2018 à 11:03:50
ReplyMarsh 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é
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 :
|
Marsh Posté le 19-03-2018 à 12:49:20
ReplyMarsh 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" |
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 :
|
le .ps1
Code :
|
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 :
|
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 :
|
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
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
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
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