¿Cuál es la diferencia entre Write-Host y Write-Output en PowerShell?
Me gusta...
Write-Host "Hello World ";
Write-Output "Hello World";
¿Cuál es la diferencia entre Write-Host y Write-Output en PowerShell?
Me gusta...
Write-Host "Hello World ";
Write-Output "Hello World";
Respuestas:
En pocas palabras, Write-Host
escribe en la propia consola. Piense en ello como un MsgBox en VBScript . Write-Output
, por otro lado, escribe en la canalización, por lo que el siguiente comando puede aceptarlo como entrada. No es necesario que lo utilice Write-Output
para escribir objetos, como Write-Output
se le pide implícitamente.
PS> Get-Service
sería lo mismo que:
PS> Get-Service | Write-Output
Write-Output envía la salida a la canalización. Desde allí, se puede canalizar a otro cmdlet o asignar a una variable. Write-Host lo envía directamente a la consola.
$a = 'Testing Write-OutPut' | Write-Output
$b = 'Testing Write-Host' | Write-Host
Get-Variable a,b
Salidas:
Testing Write-Host
Name Value
---- -----
a Testing Write-OutPut
b
Si no le dice a Powershell qué hacer con la salida de la canalización asignándola a una variable o canalizándola a otro comando, entonces se envía a la salida predeterminada, que normalmente es la consola, por lo que el resultado final parece el mismo. .
Write-Output
envía los datos como un objeto a través de la canalización. En el ejemplo de Preguntas, solo pasará una cadena.
write-host
depende del anfitrión. En la consola write-host
esencialmente está haciendo [console]::WriteLine
. Vea esto para más información.
Write-Ouput
envía objetos. Esta vez fue una cadena, pero en general enviará objetos, y normalmente no es necesario usarla, ya que es la forma predeterminada de generar resultados / datos :)
Otra diferencia entre Write-Host y Write-Output:
Write-Host muestra el mensaje en la pantalla, pero no lo escribe en el registro
Write-Output escribe un mensaje en el registro, pero no lo muestra en la pantalla.
Y Write-Host se considera dañino. Puede ver una explicación detallada en Write-Host Considered Dañino .
Write-Output
muestra el mensaje en la pantalla, si está ejecutando el script usted mismo. Así que no estoy seguro de lo que quiere decir con "Write-Output escribe un mensaje en el registro, pero no lo muestra en la pantalla". ?
Puede comprender la diferencia entre los dos cmds con el siguiente ejemplo:
Host de escritura "msgtxt" | Get-Service Al ejecutar arriba, obtendrá la salida como "msgtxt"
Salida de escritura "msgtxt" | Get-Service Al ejecutar arriba, recibirá un error ya que msgtxt no es el nombre de ningún servicio (en condiciones ideales) (ya que lo está escribiendo en una canalización y se pasa como entrada a Get-Service)