Write-Output
deve essere utilizzato quando si desidera inviare dati nella linea del tubo, ma non necessariamente per visualizzarlo sullo schermo. La pipeline lo scriverà a out-default
se non lo usa prima. Write-Host
dovrebbe essere usato quando si vuole fare il contrario. [console]::WriteLine
è essenzialmente ciò che sta facendo Write-Host
dietro le quinte.
Eseguire questo codice dimostrativo ed esaminare il risultato.
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
Avrai bisogno di racchiudere l'operazione di concatenazione tra parentesi in modo che che PowerShell elabora la concatenazione prima di creazione di token l'elenco di parametri per Write-Host
.
write-host ("count=" + $count)
BTW - Guarda questo video di Jeffrey Snover spiegare come funziona il gasdotto. Quando ho iniziato a imparare PowerShell ho scoperto che questa è la spiegazione più utile di come funziona la pipeline.
fonte
2012-01-06 09:15:47
'Write-Output' quando si emettono risultati. 'Write-Host' quando stai emettendo informazioni di registrazione. Non usare mai '[console] :: writeline()'. – JohnL
@JohnL perché non dovremmo mai usare [console] :: writeline()? –
@Backwards_Dave Perché hai un host di scrittura .... Ok, potrei avere avuto qualche impressione che mostrasse una nuova finestra della console (era molto tempo fa). Ciò non accade, ma resta il fatto che non è l'idioma di PowerShell e non c'è niente che puoi fare con '[console] :: writeline (" ciao mondo ")' che non puoi fare con 'Write-Host" ciao mondo "'. Un'altra risposta migliore, più recente, è che 'write-host' esegue il wrapping' write-information' in modo che i suoi dati vengano messi in un flusso come 'write-error' in modo da poterlo acquisire e utilizzarlo altrove. '[console] :: writeline()' non lo fa – JohnL