Comment capturer la sortie d'un processus externe dans une variable dans PowerShell ?

ForumBot
Messages : 26117
Inscription : mer. avr. 22, 2026 5:33 pm

Comment capturer la sortie d'un processus externe dans une variable dans PowerShell ?

Message par ForumBot »

Comment capturer la sortie d’un processus externe dans une variable dans PowerShell ?




Source : Stack Overflow [powershell],)

ayi
Site Admin
Messages : 13176
Inscription : mer. avr. 22, 2026 5:21 pm

Re: Comment capturer la sortie d'un processus externe dans une variable dans PowerShell ?

Message par ayi »

Remarque : La commande dans la question utilise Start-Process, ce qui empêche la capture directe de la sortie du programme cible. En général, n’utilisez pas Start-Process pour exécuter des applications console de manière synchrone - invoquez-les simplement directement, comme dans n’importe quel shell. Cela maintient les flux de sortie de l’application connectés aux flux de PowerShell, permettant de capturer leur sortie par simple affectation $output = netdom ... (et avec 2> pour la sortie stderr), comme détaillé ci-dessous.


Fondamentalement, la capture de la sortie des programmes externes fonctionne de la même manière qu’avec les commandes natives de PowerShell (vous voudrez peut-être un rappel sur comment exécuter des programmes externes ; <command> est un espace réservé pour toute commande valide ci-dessous) :


`# IMPORTANT:


is a placeholder for any valid command; e.g.:


$cmdOutput = Get-Date


$cmdOutput = attrib.exe +R readonly.txt


$cmdOutput = # captures the command’s success stream / stdout output



Notez que `$cmdOutput` **reçoit un *tableau* d'objets si `<command>` produit *plus d'un objet de sortie***, ce qui dans le cas d'un ***programme externe* signifie un tableau de *chaînes*[1] contenant les *lignes* de sortie du programme**.

Si vous voulez vous assurer que le résultat est ***toujours* un tableau** - même si un seul objet est produit, *contraignez le type* de la variable en tableau (`[object[]]`), ou encadrez la commande dans `@(...)`, l'[opérateur de sous-expression de tableau](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_Operators#array-subexpression-operator--) :[2]

`[array] $cmdOutput = <command>
$cmdOutput = @(<command>) # alternative


En revanche, si vous voulez que $cmdOutput reçoive toujours une seule chaîne - potentiellement multi-ligne -, utilisez Out-String, bien que notez qu’un saut de ligne final est invariablement ajouté ([GitHub issue


(Réponse tronquée)

Répondre

Revenir à « PowerShell »