Question
Lancer exe avec arguments définis dans variables
- Burgun
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 40
- Remerciements reçus 0
il y a 14 ans 4 mois #10507
par Burgun
Lancer exe avec arguments définis dans variables a été créé par Burgun
Bonjour,
Je suis un utilisateur ocassionnel de PowerShell, et je suis confronté à une petite prise de tête.
Mon objectif est de lancer depuis un scrip PS, une commande faisant appel à un exécutable installé par une application tierce, en utilisant des arguments issues de variables définis dans mon script.
Voici le début avec la définition des variables
[code:1]
$Path=\"E:\Corebridge\Corebridge Server\bin\"
$Synchro=\"GAL_to_DirEXT\"
$Log=\"D:\Corebridge\Log\GAL_to_DirEXT.txt\"
[/code:1]
Par la suite je construit ma commande
[code:1]
$cmd=\"\"\"$Path\CORESYNC.EXE\"\" -s \"\"$Synchro\"\" -Debug -log \"\"$Log\"\"\"
[/code:1]
Ce qui revient à ceci:
\"E:\Corebridge\Corebridge Server\bin\CORESYNC.EXE\" -s \"GAL_to_DirEXT\" -Debug -log \"D:\Corebridge\Log\GAL_to_DirEXT.txt\"
Si je copie cette ligne dans un simple .bat, et que je lance le .bat, aucun problème.
Mais je voudrais ne pas avoir à construire un batch et tout passer par PS
Le problème c'est que je n'arrive pas à ce que cette commande soit lancée et que PS attente la fin de l'exécution. Car ensuite, j'aimerais analyser le contenu de la log pour déclencher des actions particulieres en fonction du résultat.
J'ai cherché sur le web, et essayé plusieurs méthodes. Si j'ai bien compris, pour l'instant ma variable $cmd est simplement interprétée comme une simple chaine de caractère.
Si je lance simplement \"$cmd\", j'aurais simplement le contenu de ma commande qui s'affiche à l'écran.
j'ai donc essayé d'utiliser le caratère \"&\" pour signaler à ps qu'il s'agit d'une commande.
Je me retrouve avec cette erreur
The term '\"E:\Corebridge\Corebridge Server\bin\CORESYNC.EXE\" -s \"GAL_to_DirEXT\" -Debug -log \"D:\Corebridge\Log\GAL_to_DirEXT.txt\"' is not recognized as the name of a cmdlet, function, script file, or operable program.
J'ai essayé \"Invoke-expression\", je me retrouve avec cette erreur
Invoke-Expression : You must provide a value expression on the right-hand side of the '-' operator.
J'ai joué avec les simples quote et doubles quote sans résultat.
J'ai essayé invoke-item, je me retrouve avec cette erreur
Invoke-Item : Cannot find drive. A drive with the name '\"E' does not exist
ou celle ci
Invoke-Item : Cannot find path 'E:\Corebridge\Corebridge Server\bin\CORESYNC.EXE -s \"GAL_to_DirEXT\" -Debug -log \"D:\Corebridge\Log\GAL_to_DirEXT.txt\"' because it does not existsi je retirer les \" du path
J'ai essayé ceci cmd /c $cmd. Mais je semble perdre une partie de la commande:
cmd.exe : 'E:\Corebridge\Corebridge' is not recognized as an internal or external command,
Bref, je ne comprend pas pourquoi je n'arrive pas à reproduire le comportement d'un simple batch nativement dans PS. Je doit m'y prendre comme un ane, mais si quelqu'un peu m'aider, je suis preneur.<br><br>Message édité par: bvivi57, à: 26/10/11 10:56
Je suis un utilisateur ocassionnel de PowerShell, et je suis confronté à une petite prise de tête.
Mon objectif est de lancer depuis un scrip PS, une commande faisant appel à un exécutable installé par une application tierce, en utilisant des arguments issues de variables définis dans mon script.
Voici le début avec la définition des variables
[code:1]
$Path=\"E:\Corebridge\Corebridge Server\bin\"
$Synchro=\"GAL_to_DirEXT\"
$Log=\"D:\Corebridge\Log\GAL_to_DirEXT.txt\"
[/code:1]
Par la suite je construit ma commande
[code:1]
$cmd=\"\"\"$Path\CORESYNC.EXE\"\" -s \"\"$Synchro\"\" -Debug -log \"\"$Log\"\"\"
[/code:1]
Ce qui revient à ceci:
\"E:\Corebridge\Corebridge Server\bin\CORESYNC.EXE\" -s \"GAL_to_DirEXT\" -Debug -log \"D:\Corebridge\Log\GAL_to_DirEXT.txt\"
Si je copie cette ligne dans un simple .bat, et que je lance le .bat, aucun problème.
Mais je voudrais ne pas avoir à construire un batch et tout passer par PS
Le problème c'est que je n'arrive pas à ce que cette commande soit lancée et que PS attente la fin de l'exécution. Car ensuite, j'aimerais analyser le contenu de la log pour déclencher des actions particulieres en fonction du résultat.
J'ai cherché sur le web, et essayé plusieurs méthodes. Si j'ai bien compris, pour l'instant ma variable $cmd est simplement interprétée comme une simple chaine de caractère.
Si je lance simplement \"$cmd\", j'aurais simplement le contenu de ma commande qui s'affiche à l'écran.
j'ai donc essayé d'utiliser le caratère \"&\" pour signaler à ps qu'il s'agit d'une commande.
Je me retrouve avec cette erreur
The term '\"E:\Corebridge\Corebridge Server\bin\CORESYNC.EXE\" -s \"GAL_to_DirEXT\" -Debug -log \"D:\Corebridge\Log\GAL_to_DirEXT.txt\"' is not recognized as the name of a cmdlet, function, script file, or operable program.
J'ai essayé \"Invoke-expression\", je me retrouve avec cette erreur
Invoke-Expression : You must provide a value expression on the right-hand side of the '-' operator.
J'ai joué avec les simples quote et doubles quote sans résultat.
J'ai essayé invoke-item, je me retrouve avec cette erreur
Invoke-Item : Cannot find drive. A drive with the name '\"E' does not exist
ou celle ci
Invoke-Item : Cannot find path 'E:\Corebridge\Corebridge Server\bin\CORESYNC.EXE -s \"GAL_to_DirEXT\" -Debug -log \"D:\Corebridge\Log\GAL_to_DirEXT.txt\"' because it does not existsi je retirer les \" du path
J'ai essayé ceci cmd /c $cmd. Mais je semble perdre une partie de la commande:
cmd.exe : 'E:\Corebridge\Corebridge' is not recognized as an internal or external command,
Bref, je ne comprend pas pourquoi je n'arrive pas à reproduire le comportement d'un simple batch nativement dans PS. Je doit m'y prendre comme un ane, mais si quelqu'un peu m'aider, je suis preneur.<br><br>Message édité par: bvivi57, à: 26/10/11 10:56
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 968
- Remerciements reçus 0
il y a 14 ans 4 mois #10523
par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:Lancer exe avec arguments définis dans variables
Bonjour,
As tu essayé avec la Cmdlet 'Invoke-Command' ?
@ +
Matthew
As tu essayé avec la Cmdlet 'Invoke-Command' ?
@ +
Matthew
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 14 ans 4 mois #10539
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Lancer exe avec arguments définis dans variables
Salut,
Matthew BETTON écrit:
bvivi57 écrit:
De mon côté, et je pense que je ne suis pas le seul, ce simple besoin est assez tordu sous PowerShell, dans ce cas c'est plutot PowerEmbrouilles !
L'usage de Echoargs( cf. pj) peut t'aider à debugger ton problème, enfin ici comprendre l'interprétation des arguments par PS.
Tu peux aussi consulter ce post .
L'usage d'une here-string peux aussi faciliter la construction d'une ligne de commande :
[code:1]
#By Olivier S. de Neos
$CommandeWD=@\"
.\msdeploy '-verb:«»sync' '-source:«»package=,encryptPassword=msDeploy,includeAcls=True' '-dest:manifest=\"$Manifest\",computerName=$destUrl,includeAcls=True'
\"@
$Result=Invoke-Expression $CommanWD[/code:1]
Comme on peut le voir dans cette exemple l'appel d'un prg externe tel que WebDeploy n'est pas du tout 'classique'.
<br><br>Message édité par: Laurent Dardenne, à: 28/10/11 20:33
Matthew BETTON écrit:
Matthew, ce cmdlet est liè au remoting, il n'est pas nécessaire de créer une session pour exécuter un process local.As tu essayé avec la Cmdlet 'Invoke-Command' ?
bvivi57 écrit:
Loin de là, ou un âne savant alorsJe doit m'y prendre comme un ane
De mon côté, et je pense que je ne suis pas le seul, ce simple besoin est assez tordu sous PowerShell, dans ce cas c'est plutot PowerEmbrouilles !
L'usage de Echoargs( cf. pj) peut t'aider à debugger ton problème, enfin ici comprendre l'interprétation des arguments par PS.
Tu peux aussi consulter ce post .
L'usage d'une here-string peux aussi faciliter la construction d'une ligne de commande :
[code:1]
#By Olivier S. de Neos
$CommandeWD=@\"
.\msdeploy '-verb:«»sync' '-source:«»package=,encryptPassword=msDeploy,includeAcls=True' '-dest:manifest=\"$Manifest\",computerName=$destUrl,includeAcls=True'
\"@
$Result=Invoke-Expression $CommanWD[/code:1]
Comme on peut le voir dans cette exemple l'appel d'un prg externe tel que WebDeploy n'est pas du tout 'classique'.
La pièce jointe EchoArgs.zip est absente ou indisponible
Tutoriels PowerShell
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 968
- Remerciements reçus 0
il y a 14 ans 4 mois #10542
par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:Lancer exe avec arguments définis dans variables
Laurent Dardenne écrit:
[Mode mauvaise fois]
D'après le Technet :
Pour ce qui concerne une exécution locale, l'activation du remoting (WinRM) n'est pas nécessaire.
De plus, 'Invoke-Command' accepte beaucoup plus de paramètres que 'Invoke-Expression' ...
[/Mode mauvaise fois]
Ceci dit, merci beaucoup pour ton explication que je trouve très claire et très intéressante
Bon 1er novembre
@ +
Matthew<br><br>Message édité par: Matthew BETTON, à: 1/11/11 15:45
Salut,
Matthew BETTON écrit:Matthew, ce cmdlet est liè au remoting, il n'est pas nécessaire de créer une session pour exécuter un process local.As tu essayé avec la Cmdlet 'Invoke-Command' ?
[Mode mauvaise fois]
D'après le Technet :
Invoke-Command
Exécute les commandes sur des ordinateurs locaux et distants.
Pour ce qui concerne une exécution locale, l'activation du remoting (WinRM) n'est pas nécessaire.
De plus, 'Invoke-Command' accepte beaucoup plus de paramètres que 'Invoke-Expression' ...
[/Mode mauvaise fois]
Ceci dit, merci beaucoup pour ton explication que je trouve très claire et très intéressante
Bon 1er novembre
@ +
Matthew<br><br>Message édité par: Matthew BETTON, à: 1/11/11 15:45
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 14 ans 4 mois #10543
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Lancer exe avec arguments définis dans variables
Matthew BETTON écrit:

Tu as raison et sans être de mauvaise foi, on peut effectivement exécuter une commande en locale avec Invoke-Command. Elle reste tout de même lièe au remoting de part la tuyauterie utilisée . Ensuite dans une session qui n'a pas les droits admin ET si on précise le paramètre Computername, on obtient ce message d'erreur :
[code:1]
$command = { get-eventlog -log \"windows powershell\" | where {$_.message -like \"*certificate*\"} }
invoke-command -cn localhost -scriptblock $command
#[localhost] La connexion au serveur distant a échoué avec le message d'erreur suivant : Accès refusé.
#Pour plus d'informations, voir la rubrique d'aide about_Remote_Troubleshooting.[/code:1]
PowerEmbrouilles ++ ?
[Mode mauvaise foi]
Tu as raison et sans être de mauvaise foi, on peut effectivement exécuter une commande en locale avec Invoke-Command. Elle reste tout de même lièe au remoting de part la tuyauterie utilisée . Ensuite dans une session qui n'a pas les droits admin ET si on précise le paramètre Computername, on obtient ce message d'erreur :
[code:1]
$command = { get-eventlog -log \"windows powershell\" | where {$_.message -like \"*certificate*\"} }
invoke-command -cn localhost -scriptblock $command
#[localhost] La connexion au serveur distant a échoué avec le message d'erreur suivant : Accès refusé.
#Pour plus d'informations, voir la rubrique d'aide about_Remote_Troubleshooting.[/code:1]
PowerEmbrouilles ++ ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Burgun
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 40
- Remerciements reçus 0
il y a 14 ans 4 mois #10544
par Burgun
Réponse de Burgun sur le sujet Re:Lancer exe avec arguments définis dans variables
Bonjour,
Merci à tous pour vos réponses. C'est très gentil de m'aider dans mon problème.
J'ai fini par résoudre mon petit soucis avec cette solution:
[code:1]
$Executable = \"$Path\CORESYNC.EXE\"
$Parametre =\"-s \"\"$Synchro\"\" -Debug -log \"\"$Log\"\"\"
start-process -Wait $Executable $Parametre
[/code:1]
Avec ceci, j'arrive à exécuter ma commande et l'ajout du parametre \"-wait\" permet a PS de revenir à l'écran uniquement à la fin de l'exécution de ma commande.
Merci à tous pour vos réponses. C'est très gentil de m'aider dans mon problème.
J'ai fini par résoudre mon petit soucis avec cette solution:
[code:1]
$Executable = \"$Path\CORESYNC.EXE\"
$Parametre =\"-s \"\"$Synchro\"\" -Debug -log \"\"$Log\"\"\"
start-process -Wait $Executable $Parametre
[/code:1]
Avec ceci, j'arrive à exécuter ma commande et l'ajout du parametre \"-wait\" permet a PS de revenir à l'écran uniquement à la fin de l'exécution de ma commande.
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.081 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Lancer exe avec arguments définis dans variables