Quelle est la différence entre Write-Host et Write-Output dans PowerShell?
Comme...
Write-Host "Hello World ";
Write-Output "Hello World";
En un mot, Write-Host
écrit sur la console elle-même. Considérez-le comme une MsgBox dans VBScript . Write-Output
, d’autre part, écrit dans le pipeline afin que la commande suivante puisse l’accepter comme entrée. Vous n'êtes pas obligé d'utiliser Write-Output
pour écrire des objets, comme Write-Output
est appelé implicitement pour vous.
PS> Get-Service
serait la même chose que:
PS> Get-Service | Write-Output
Write-Output envoie la sortie au pipeline. De là, il peut être redirigé vers une autre applet de commande ou attribué à une variable. Write-Host l'envoie directement à la console.
$a = 'Testing Write-OutPut' | Write-Output
$b = 'Testing Write-Host' | Write-Host
Get-Variable a,b
Les sorties:
Testing Write-Host
Name Value
---- -----
a Testing Write-OutPut
b
Si vous ne dites pas à Powershell quoi faire avec la sortie dans le pipeline en l'attribuant à une variable ou en la canalisant vers une autre commande, elle est envoyée à out-default, qui est normalement la console, de sorte que le résultat final est identique. .
Write-Output
envoie les données sous forme d'objet via le pipeline. Dans l'exemple Questions, il suffit de passer une chaîne.
write-Host
dépend de l'hôte. Dans la console write-Host
fait essentiellement [console]::WriteLine
. Voir this pour plus d'informations.
Une autre différence entre Write-Host et Write-Output:
Write-Host affiche le message à l'écran, mais ne l'écrit pas dans le journal.
Write-Output écrit un message dans le journal, mais ne l'affiche pas à l'écran.
Et Write-Host est considéré comme nuisible. Vous pouvez voir une explication détaillée dans écriture hostile considérée comme nuisible.