Write-Output
doit être utilisé lorsque vous souhaitez envoyer des données dans le pipe-line, mais pas nécessairement les afficher à l'écran. Le pipeline finira par l'écrire dans out-default
si rien d'autre ne l'utilise en premier.
Write-Host
doit être utilisé lorsque vous voulez faire le contraire.
[console]::WriteLine
est essentiellement ce que Write-Host
fait dans les coulisses.
Exécutez ce code de démonstration et examinez le résultat.
function Test-Output {
Write-Output "Hello World"
}
function Test-Output2 {
Write-Host "Hello World" -foreground Green
}
function Receive-Output {
process { Write-Host $_ -foreground Yellow }
}
#Output piped to another function, not displayed in first.
Test-Output | Receive-Output
#Output not piped to 2nd function, only displayed in first.
Test-Output2 | Receive-Output
#Pipeline sends to Out-Default at the end.
Test-Output
Vous devrez mettre l'opération de concaténation entre parenthèses, afin que PowerShell traite la concaténation avant de tokeniser la liste des paramètres pour l'opération Write-Host
ou utiliser l'interpolation de chaînes de caractères
write-host ("count=" + $count)
# or
write-host "count=$count"
BTW - Regardez ceci vidéo de Jeffrey Snover expliquant le fonctionnement du pipeline. Lorsque j'ai commencé à apprendre PowerShell, j'ai trouvé que c'était l'explication la plus utile du fonctionnement du pipeline.
5 votes
Write-Output
quand vous émettez des résultats.Write-Host
lorsque vous émettez des informations de journalisation. N'utilisez jamais[console]::writeline()
.3 votes
@JohnL pourquoi ne devrions-nous jamais utiliser [console]::writeline() ?
4 votes
@Backwards_Dave Parce que vous avez Write-Host.... Ok, j'ai peut-être eu l'impression que cela montrait une nouvelle fenêtre de console (c'était il y a assez longtemps). Cela n'arrive pas, mais le fait est que ce n'est pas l'idiome powershell et qu'il n'y a rien que vous puissiez faire avec...
[console]::writeline("hello world")
que vous ne pouvez pas faire avecWrite-Host "hello world"
. Une autre réponse, meilleure et plus récente, est quewrite-host
enveloppeswrite-information
donc ses données sont placées dans un flux commewrite-error
pour que vous puissiez le capturer et l'utiliser ailleurs.[console]::writeline()
ne le fait pas