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)
Кстати - посмотрите это видео Джеффри Сновера, объясняющее, как работает конвейер. Когда я начал изучать PowerShell, я обнаружил, что это наиболее полезное объяснение того, как работает конвейер.