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

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

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)