Y a-t-il un bogue dans la Start-Process
commande de PowerShell lors de l'accès aux propriétés StandardError
et StandardOutput
?
Si j'exécute ce qui suit, je n'obtiens aucune sortie:
$process = Start-Process -FilePath ping -ArgumentList localhost -NoNewWindow -PassThru -Wait
$process.StandardOutput
$process.StandardError
Mais si je redirige la sortie vers un fichier, j'obtiens le résultat attendu:
$process = Start-Process -FilePath ping -ArgumentList localhost -NoNewWindow -PassThru -Wait -RedirectStandardOutput stdout.txt -RedirectStandardError stderr.txt
powershell
start-process
jzbruno
la source
la source
$process= ping localhost
# enregistrerait la sortie dans la variable de processus.Réponses:
Voilà comment a
Start-Process
été conçu pour une raison quelconque. Voici un moyen de l'obtenir sans envoyer au fichier:la source
Dans le code donné dans la question, je pense que la lecture de la propriété ExitCode de la variable d'initiation devrait fonctionner.
Notez que (comme dans votre exemple) vous devez ajouter les paramètres
-PassThru
et-Wait
(cela m'a surpris pendant un moment).la source
-NoNewWindow
avec-Verb runAs
J'ai également eu ce problème et j'ai fini par utiliser le code d' Andy pour créer une fonction pour nettoyer les choses lorsque plusieurs commandes doivent être exécutées.
Il renverra les codes stderr, stdout et exit en tant qu'objets. Une chose à noter: la fonction n'acceptera pas
.\
dans le chemin; les chemins complets doivent être utilisés.Voici comment l'utiliser:
la source
IMPORTANT:
Nous avons utilisé la fonction fournie ci-dessus par LPG .
Cependant, cela contient un bogue que vous pourriez rencontrer lorsque vous démarrez un processus qui génère beaucoup de sortie. Pour cette raison, vous pourriez vous retrouver avec un blocage lors de l'utilisation de cette fonction. Utilisez plutôt la version adaptée ci-dessous:
Vous trouverez de plus amples informations sur ce problème sur MSDN :
la source
J'ai vraiment eu des problèmes avec ces exemples d'Andy Arismendi et de LPG . Vous devez toujours utiliser:
avant d'appeler
Un exemple complet est:
la source
Voici ma version de la fonction qui renvoie System.Diagnostics.Process standard avec 3 nouvelles propriétés
la source
Voici un moyen simple d'obtenir la sortie d'un autre processus PowerShell:
la source