Bonjour à tous ,
Je dispose d'un script powershell que je souhaiterai utiliser dans mon script Perl . Ma question est: Comment faut-il faire pour executer un script powershell à partir du code perl si c'est possible ?
Merci
Version imprimable
Bonjour à tous ,
Je dispose d'un script powershell que je souhaiterai utiliser dans mon script Perl . Ma question est: Comment faut-il faire pour executer un script powershell à partir du code perl si c'est possible ?
Merci
Oui, c'est possible, mais la façon d'y arriver dépend de ce que tu veux obtenir comme résultat exactement.
Si tu souhaite récupérer dans le programme Perl les données produites (à l'écran) par le script Powershell, par exemple pour les retraiter ensuite,, alors il faut utiliser les backquotes (ou accents graves), avec un truc dans ce genre:
L'opérateur qx permet de faire à peu près la même chose:Code:
1
2 my @resultat = `script_powershell param`;
Là, j'ai utilisé un tableau pour la variable résultat, mais on peut aussi utiliser un scalaire, suivant le but recherché.Code:
1
2 my @resultat = qx{script_powershell param};
Si tu veux juste l'exécuter et simplement récupérer le code de sortie (succès ou erreur, par exemple) du script, alors utilise la fonction <i>system</i>.
Si tu veux juste le lancer sans t'intéresser au résultat et mettre fin tout de suite au programme Perl, alors il y a la fonction <i>exec</i>, utilisée comme system ci-dessus (mais sans la partie "my code_retour =", puisque le programme Perl se termine immédiatement).Code:
1
2 my $code_retour = system("script_powershell param");
Merci pour ta réponse .
Moi j'ai besoin juste de l'executer donc le exec me suffit amplement mais comment faut-il faire car j'ai fais
exec("chemin fichier powershell"); et cela ne fonctionne pas alors que si j'utilise system cela ouvre mon fichier powershell dans bloc notes
DSL, mais je n'ai pas ici d'environnement me permettant de tester et je ne connais pas vraiment Powershell. Mais une commande system fait un fork (création d'un nouveau process), donc c'est assez logique que ça ouvre une nouvelle fenêtre. Avec exec, ça ne devrait pas arriver, puisque le script Powershell devrait remplacer le programme Perl dans la même fenêtre.
Mais peux-tu montrer la commande exacte que tu emploies pour ton exec? Peut-être qu'on aura une idée à te suggérer.
la commande que j'utilise :
et l'interpreteur me dit 'C:\...\...\monFichier' n'est pas reconnu en tant que commande interne ou externe , un programme executable ou un fichier de commandes.Code:
1
2 exec("C:\...\...\monFichier.ps1");
Il faudrait commencer par vérifier que les fichier 'ps1' soient associés à powershell, ce dont je doute.
La possibilité trouvé avec mon ami google est de mettre le nom du programme qui doit interpréter ton fichier :
j'ai trouvé cette possibilité (pas une solution car pas testé) ici :Code:exec("powershell C:\...\...\monFichier.ps1");
http://syskb.com/comment-executer-un...en-powershell/
Ok Jean-Mi , je vais tester cela de suite je donne un retour.
c'est mieux , faut que je regarde maintenant sur mon pc car y me dit que l'execution de scripts est désactivé sur ce pc
Merci pour vos réponses. C'est bon Jean-Mi cela fonctionne parfaitement maintenant , merci beaucoup.
petite modification , Jean-Mi à donner la bonne solution pour executer mais cela bug quand il y'a des saisies à effectuer dans le programme powershell car l'interpreteur ne reconnait pas la commande donc une légére modification est à effectué en donnant le chemint du powershell :
Code:
1
2
3
4
5
6
7 #exec("powershell C:\\Strawberry\\unzipper.ps1"); my $powershellPath ="c:\\windows\\system32\\windowspowershell\\v1.0\\powershell.exe"; my $filePath ="c:\\Strawberry\\unzipper.ps1"; system("$powershellPath $filePath");
La question que tout le monde se pose : que fais tu dans ton script powershell ?
J'aurais tendance à dire que tout ce que tu fais en powershell peut être fait en perl.
Ce que je fais en PowerShell est du dezippage de fichier , j'aurai trés bien pu le faire en perl mais vu que je suis stagiaire on m'a demandé de le faire en PowerShell pour toucher un peu à tout maintenant c'est que j'aimerai l'intégrer à mon script pour uniformisé le tout et pas à avoir deux choses séparés.
Bien sur , j'aurai aussi vite fait de faire la totalité que de bloquer sur des broutilles mais bon je n'aie pas le choix ^^ . Enfin si je continue à avoir trop soucis , je vais le faire quand meme et je dirai que sa poser trop probléme :D