Quelle est la différence entre Write-Host et Write-Output dans PowerShell?
Comme...
Write-Host "Hello World ";
Write-Output "Hello World";
Quelle est la différence entre Write-Host et Write-Output dans PowerShell?
Comme...
Write-Host "Hello World ";
Write-Output "Hello World";
Réponses:
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, de sorte que la commande suivante peut l'accepter comme entrée. Vous n'êtes pas obligé d'utiliser Write-Output
pour écrire des objets, comme cela Write-Output
est implicitement appelé pour vous.
PS> Get-Service
serait le même que:
PS> Get-Service | Write-Output
Write-Output envoie la sortie au pipeline. À partir de là, il peut être redirigé vers une autre applet de commande ou affecté à 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 vers le pipeline en l'attribuant à une variable ou en la redirigeant vers une autre commande, elle est envoyée à out-default, qui est normalement la console, de sorte que le résultat final semble le même .
Write-Output
envoie les données en tant qu'objet via le pipeline. Dans l'exemple Questions, il ne passera qu'une chaîne.
write-host
dépend de l'hôte. Dans la console write-host
fait essentiellement [console]::WriteLine
. Voir ceci pour plus d'informations.
Write-Ouput
envoie des objets. Cette fois, c'était une chaîne, mais en général, elle enverra des objets, et il est normalement inutile d'utiliser car c'est le moyen par défaut de sortir les résultats / données :)
Une autre différence entre Write-Host et Write-Output:
Write-Host affiche le message à l'écran, mais il 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 dangereux. Vous pouvez voir une explication détaillée dans l' hôte d'écriture considéré comme nocif .
Write-Output
le message s'affiche à l'écran, si vous exécutez le script par vous-même. Donc je ne suis pas sûr de ce que vous voulez dire avec "Write-Output écrit un message dans le journal, mais il ne l'affiche pas à l'écran." ?
Vous pouvez comprendre la différence entre les deux cmds avec l'exemple ci-dessous:
Hôte d'écriture "msgtxt" | Get-Service Lors de l'exécution ci-dessus, vous obtiendrez la sortie en tant que "msgtxt"
Sortie d'écriture "msgtxt" | Get-Service Lors de l'exécution ci-dessus, vous recevrez une erreur car msgtxt n'est le nom d'aucun service. (Dans des conditions idéales) (puisque vous l'écrivez dans un pipeline et qu'il est passé comme entrée à Get-Service)