175 votes

Comment écrire dans la console avec PowerShell ?

J'ai un peu de mal à comprendre les différentes façons d'imprimer (echo) sur la console. J'ai vu qu'il y a plusieurs façons d'écrire une sortie sur la console, comme par exemple :

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

Les trois méthodes s'affichent sur la console. Celle du milieu est en quelque sorte plus simple, moins verbeuse et plus facile à utiliser. Je trouve également que lorsque vous écrivez une fonction telle que :

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

Il renvoie toujours deux chaînes de caractères dans le pipeline :

Et je suis toujours en mesure d'imprimer les valeurs :

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

Ce que j'ai constaté, c'est que l'utilisation de la chaîne citée n'apparaît pas toujours sur les hôtes personnalisés et que j'ai dû utiliser Écrire à l'hébergeur 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 censé être un alias de Write-Host ou quelle est l'intention ?

124voto

Joey Points 148544

Le comportement par défaut de PowerShell consiste à déverser tout ce qui tombe d'un pipeline sans être récupéré par un autre élément du pipeline ou sans être assigné à une variable (ou redirigé) dans le fichier Out-Host . Ce que Out-Host dépend évidemment de l'hôte.

Se contenter de laisser les choses tomber dans le pipeline, c'est no un substitut de Write-Host qui existe pour la seule raison de produire du texte dans l'application hôte.

Si vous souhaitez obtenir un résultat, utilisez la fonction Write-* cmdlets. Si vous souhaitez obtenir les valeurs de retour d'une fonction, il vous suffit d'y déposer les objets sans aucune cmdlet.

74voto

Shay Levy Points 41404

Celui du milieu écrit dans le pipeline. Write-Host y Out-Host écrit sur la console. echo" est un alias de Write-Output qui écrit également dans le pipeline. La meilleure façon d'écrire dans la console est d'utiliser la commande Write-Host cmdlet.

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

"hello world" | Do-Something

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

Write-Host "hello world" | Do-Something

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X