Bonjour,
Je cherche à lancer une commande powershell et récupérer le résultat.
J'ai essayé pleins de méthodes run() ou shellexcute() mais sans succès.
Je veux pas qu'une fenêtre s'ouvre, je veux que la commande powershell soit transparent.
Pouvez-vous me donner la démarche à suivre.
Merci d'avance,
Damien
Récupérez le retour d'une commande powershell
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
- TommyDDR
- Modérateur
- Messages : 2102
- Enregistré le : mar. 22 juil. 2008 21:55
- Localisation : Nantes
- Status : Hors ligne
Re: Récupérez le retour d'une commande powershell
Run fonctionne très bien chez moi :
Note, il est important de lire le flux (StdoutRead / StderrRead) une dernière fois quand le processus s'est arrêté pour être sur d'avoir tout lu.
En effet, si vous avez lu, qu'entre temps le processus a envoyé d'autres données, qu'il s'est arrêté et que vous vous basez sur l'existence ou non du processus, il vous manquera des données (c'est à ça que sert le $canRead).
#include <AutoItConstants.au3>
#include <WinAPIConv.au3>
Local $pid = Run("powershell.exe dir", @WorkingDir, @SW_HIDE, BitOR($STDIN_CHILD, $STDOUT_CHILD, $STDERR_CHILD))
Local $canRead = True
While($canRead)
$canRead = ProcessExists($pid)
ConsoleWrite(_WinAPI_OemToChar(StdoutRead($pid)))
ConsoleWriteError(_WinAPI_OemToChar(StderrRead($pid)))
WEnd
StdioClose($pid)
#include <WinAPIConv.au3>
Local $pid = Run("powershell.exe dir", @WorkingDir, @SW_HIDE, BitOR($STDIN_CHILD, $STDOUT_CHILD, $STDERR_CHILD))
Local $canRead = True
While($canRead)
$canRead = ProcessExists($pid)
ConsoleWrite(_WinAPI_OemToChar(StdoutRead($pid)))
ConsoleWriteError(_WinAPI_OemToChar(StderrRead($pid)))
WEnd
StdioClose($pid)
En effet, si vous avez lu, qu'entre temps le processus a envoyé d'autres données, qu'il s'est arrêté et que vous vous basez sur l'existence ou non du processus, il vous manquera des données (c'est à ça que sert le $canRead).
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Re: Récupérez le retour d'une commande powershell
Merci de votre retour et vos explications.
Le problème, c'est même en exécutant votre code.
j'ai rien qui s'affiche la console du bas et j'ai une fenêtre blanc qui s'affiche.
Par contre si je remplace par Run(@ComSpec & " /c dir "& @ScriptFullPath, "", @SW_HIDE, $STDOUT_CHILD)
la j'ai bien les retours dans la console et pas de fenêtre.
Le problème, c'est même en exécutant votre code.
j'ai rien qui s'affiche la console du bas et j'ai une fenêtre blanc qui s'affiche.
Par contre si je remplace par Run(@ComSpec & " /c dir "& @ScriptFullPath, "", @SW_HIDE, $STDOUT_CHILD)
la j'ai bien les retours dans la console et pas de fenêtre.
Re: Récupérez le retour d'une commande powershell
Est-ce qu'il serait possible de voir votre code (complet ou en partie) ?
C'est un petit peu difficile d'aider quelqu'un en ne sachant pas vraiment ce que l'on est censé faire...
Avec le peu d'informations à notre disposition, je ne peux que donner un lien vers la documentation officielle qui montre dans l'exemple comment cela fonctionne:
C'est un petit peu difficile d'aider quelqu'un en ne sachant pas vraiment ce que l'on est censé faire...
Avec le peu d'informations à notre disposition, je ne peux que donner un lien vers la documentation officielle qui montre dans l'exemple comment cela fonctionne:
-
StdoutRead
-
StderrRead
Re: Récupérez le retour d'une commande powershell
Désolé de répondre si tard mais merci pour vos commentaires.
J''ai galéré car autoit plantait quand je lançais un script powershell.
Je viens de m'y remettre avec un autre pc et ça fonctionne.
Je ne comprends pas pourquoi car avant cela fonctionnait.
J''ai galéré car autoit plantait quand je lançais un script powershell.
Je viens de m'y remettre avec un autre pc et ça fonctionne.
Je ne comprends pas pourquoi car avant cela fonctionnait.