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?
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.
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