web-dev-qa-db-fra.com

Meilleur moyen d'écrire sur la console dans PowerShell

J'ai un peu de confusion sur les différentes manières d'imprimer (écho) sur la console. J'ai vu qu'il y avait plusieurs façons d'écrire une sortie sur la console, telles que:

Write-Host "Hello world1"
"Hello World2"
Out-Host -InputObject "Hello World3"

Les trois manières d’imprimer sur la console. Celui du milieu est en quelque sorte plus simple, moins bavard et plus facile à utiliser. Je trouve aussi que lorsque vous écrivez une fonction telle que:

function GetValues()
{
    "1"
    "2"
}

Il renvoie toujours deux chaînes dans le pipeline:

Et je suis encore capable d'imprimer les valeurs:

foreach ($s in GetValues)
{
    Write-Host "s: " $s
}

Ce que j'ai trouvé, c'est que l'utilisation de la chaîne entre guillemets n'apparaît pas toujours sur les hôtes personnalisés et que j'ai dû utiliser Write-Host pour obtenir des valeurs à imprimer sur des hôtes personnalisés.

D'une certaine manière, je trouve cela déroutant. Est-ce que "Print something" est supposé être un alias de Write-Host ou quelle est l'intention?

128
Andre

Le comportement par défaut de PowerShell consiste simplement à vider tout ce qui sort d'un pipeline sans être capté par un autre élément du pipeline ou affecté à une variable (ou redirigé) dans Out-Host. Ce que Out-Host fait est évidemment dépendant de l'hôte.

Laisser simplement tomber des éléments du pipeline est pas un substitut de Write-Host qui existe pour la seule raison de produire du texte dans l'application hôte.

Si vous souhaitez obtenir une sortie, utilisez les applets de commande Write-*. Si vous souhaitez renvoyer les valeurs d'une fonction, il suffit de vider les objets sans aucune applet de commande.

93
Joey

Celui du milieu écrit dans le pipeline. Write-Host et Out-Host écrit sur la console. 'echo' est un alias pour Write-Output qui écrit également dans le pipeline. Le meilleur moyen d'écrire sur la console consiste à utiliser l'applet de commande Write-Host.

Lorsqu'un objet est écrit dans le pipeline, il peut être utilisé par d'autres commandes de la chaîne. Par exemple:

"hello world" | Do-Something

mais cela ne fonctionnera pas car Write-Host écrit dans la console, pas dans le pipeline (Do-Something n'obtiendra pas la chaîne):

Write-Host "hello world" | Do-Something
52
Shay Levy