Question script powershell appellé avec des arguments vides

Plus d'informations
il y a 12 ans 3 semaines #17394 par CGR
Bonjour à tous,

J'ai un problème pour lancer un script avec des arguments, il doit se lancer de la sorte :

Powershell.exe D:\AppDSI\PPRGLB\EDE\cmd\TEST.PS1 -parm1 testparm -parm2 12 -parm3 E:\Data\test.csv -parm4 TEST -parm5 45

Tout se passe correctement si les arguments parm1 à 5 ont des valeurs.
Le problème apparait lorsque j'ai des paramètres qui sont vides, comme par exemple si parm1 = vide; la commande devient :

Powershell.exe D:\AppDSI\PPRGLB\EDE\cmd\TEST.PS1 -parm1 -parm2 12 -parm3 E:\Data\test.csv -parm4 TEST -parm5 45
Missing an argument for parameter 'parm1'

Comment puis-je faire pour qu'un paramètre puisse être vide? J'ai essayé DANS le script de forcer une valeur :
[code:1]param
(
$parm1 = \"vide\"
)[/code:1]

mais cela n'est pas la solution car c'est la facon dont j'appelle la commande qui pose problème!
Je sais qu'en retirant le -parm1 de ma commande, cela va fonctionner, mais je ne saurais jamais à l'avance si mes paramètres seront vides ou non et ce script doit se lancer automatiquement...

Powershell.exe D:\AppDSI\PPRGLB\EDE\cmd\TEST.PS1 -parm2 12 -parm3 E:\Data\test.csv -parm4 TEST -parm5 45

J'ai cherché un peu sur google sans trouver de solution...
Pouvez vous m'aider? ;)

En vous remerciant par avance


PS : je pourrais forcer l'ajout d'un caractère à mes paramètres et le retirer ensuite dans le script.Par exemple :
-parm1 #testparm
-parm2 #12
-parm3 #E:\Data\test.csv
-parm4 #TEST
Cela ferait que les paramètres ne seraient jamais vides mais si vous avez une meilleur solution, je suis preneur.

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

Plus d'informations
il y a 12 ans 3 semaines #17397 par Philippe
salut

quand tu met -param1 tu indique a powershell qu'une info va obligatoirement suivre -param1

soit tu enlève -param1
soit tu met un paramètre vide mis entre quotes ('')

ex :
[code:1]Powershell.exe D:\App\DSI\PPRGLBEDE\cmdTEST.PS1 -parm1 '' -parm2 12 -parm3 E:«»Datatest.csv -parm4 TEST -parm5 45[/code:1]

test si ca te convient

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

Plus d'informations
il y a 12 ans 3 semaines #17401 par CGR
Salut,

merci pour la réponse 6ratgus mais cela ne fonctionne pas sur mon serveur (Windows 2008r2 et powershell v2.0).

J'ai essayé
-parm1 ''
-parm1 ' '
-parm1 \"\"
-parm1 \" \"
-parm1 ``
-parm1 ` `

mais rien n'y fait, j'ai toujours l'erreur
Missing an argument for parameter 'parm1'. Specify a parameter of type 'System.Object' and try again.

comme je ne sais pas si parm1 aura une valeur, je ne peux pas l'enlever de la commande...
je crois que je vais bidouiller pour forcer une valeur car je ne trouve pas d'autre solution...

si je trouve, je déposerai l'astuce ;)

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

Plus d'informations
il y a 12 ans 3 semaines #17403 par xyz
Salut,
peux nous communiquer le contenu de la clause Param de ton script ?

Tutoriels PowerShell

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

Plus d'informations
il y a 12 ans 3 semaines #17404 par Philippe
salut

comme semble dire le message et pensé Laurent,
le paramètre attendu doit sans doute être un entier, hors on lui passe une chaine avec les deux quottes.

pour le confirmer ils nous faudrait les premières lignes au debut du script avec les parameter.

si c'est le cas, il faudra que tu mette pour ce paramètre là un zéro (0) sans les quottes quand il n'y a pas de valeur
et sinon zéro suivit de la valeurs.

ex :

[code:1]
parm1 avec fichier
parm2 vide
Powershell.exe D:\App\DSI\PPRGLBEDE\cmdTEST.PS1 -parm1 'fichier' -parm2 0
ou
parm1 vide
parm2 avec 12
Powershell.exe D:\App\DSI\PPRGLBEDE\cmdTEST.PS1 -parm1 '' -parm2 012
ou
parm1 avec test
parm2 avec 12
Powershell.exe D:\App\DSI\PPRGLBEDE\cmdTEST.PS1 -parm1 'test' -parm2 012 [/code:1]

PS : attention avec cette modif tes paramètres ne seront jamais null mais equal a zéro ou a \"\"(vide)
vérifie tous tes if, where et autre contrôle.

tiens nous au courant !<br><br>Message édité par: 6ratgus, à: 25/04/14 10:39

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

Plus d'informations
il y a 12 ans 3 semaines #17405 par ANTRI Mohamed
Bonjour,

Pourquoi ne pas utiliser les fonctionnalités avancées ? Ainsi il pourrait bénéficier de l'attribut [code:1]Mandatory = $true ou $false[/code:1] sur un paramètre.

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

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