Write-Output
следует использовать, когда вы хотите отправить данные в линии трубопровода, но не обязательно хотите отображать его на экране. Конвейер, в конце концов, напишет его на out-default
, если ничто другое не использует его в первую очередь. Write-Host
следует использовать, когда вы хотите сделать обратное. [console]::WriteLine
- это то, что Write-Host
делает за кулисами.
Запустите этот демонстрационный код и просмотрите результат.
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
Вам нужно будет заключить операцию конкатенации в круглых скобках, чтобы этот PowerShell обрабатывал конкатенацию перед тем, чтобы токенизировать список параметров для Write-Host
.
write-host ("count=" + $count)
BTW - Смотрите это видео Джеффри Сновера, объясняя, как работает трубопровод. Когда я начал изучать PowerShell, я нашел это наиболее полезным объяснением того, как работает конвейер.