Write-Output
debe usarse cuando desea enviar datos en la tubería, pero no necesariamente quiere mostrarlos en la pantalla. La tubería eventualmente lo escribirá out-default
si nada más lo usa primero.
Write-Host
debe usarse cuando quieres hacer lo contrario.
[console]::WriteLine
es esencialmente lo que Write-Host
está haciendo detrás de escena.
Ejecute este código de demostración y examine el resultado.
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
Deberá encerrar la operación de concatenación entre paréntesis, de modo que PowerShell procese la concatenación antes de tokenizar la lista de parámetros Write-Host
o utilice la interpolación de cadenas
write-host ("count=" + $count)
# or
write-host "count=$count"
Por cierto, mira este video de Jeffrey Snover explicando cómo funciona la tubería. Cuando comencé a aprender PowerShell, descubrí que esta era la explicación más útil de cómo funciona la canalización.
Write-Output
cuando estás emitiendo resultados.Write-Host
cuando estás emitiendo información de registro. Nunca lo use[console]::writeline()
.[console]::writeline("hello world")
que no puedas hacerWrite-Host "hello world"
. Otra respuesta mejor y más reciente aplicable es que sewrite-host
envuelvewrite-information
para que sus datos se pongan en una secuencia comowrite-error
para que pueda capturarlos y usarlos en otro lugar.[console]::writeline()
no hace eso