PowerShell与Write-Host和Write-Output之间的区别?

时间:2013-11-03 14:34:16

标签: windows powershell

PowerShell中Write-HostWrite-Output之间的区别是什么?

喜欢......

Write-Host "Hello World ";

Write-Output "Hello World";

5 个答案:

答案 0 :(得分:48)

简而言之,Write-Host写入控制台本身。可以将其视为VBScript中的MsgBox。另一方面,Write-Output写入管道,因此下一个命令可以接受它作为输入。您不需要使用Write-Output来编写对象,因为Write-Output是为您隐式调用的。

PS> Get-Service

与:

相同
PS> Get-Service | Write-Output

答案 1 :(得分:16)

Write-Output将输出发送到管道。从那里它可以通过管道传输到另一个cmdlet或分配给变量。 Write-Host直接将其发送到控制台。

$a = 'Testing Write-OutPut'  | Write-Output
$b = 'Testing Write-Host' | Write-Host

Get-Variable a,b

输出:

Testing Write-Host

Name                           Value                                                                 
----                           -----                                                                 
a                              Testing Write-OutPut                                                  
b                                                  

如果你没有告诉Powershell如何处理输出到管道的输出,通过将其分配给变量或将其传递给anoher命令,那么它将被发送到out-default,这通常是控制台,所以最终结果看起来是一样的。

答案 2 :(得分:7)

Write-Output通过管道将数据作为对象发送。在问题示例中,它将只传递一个字符串。

write-host依赖于主机。在控制台中write-host基本上正在执行[console]::WriteLine。 有关详细信息,请参阅this

答案 3 :(得分:5)

写主机和写输出之间的另一个区别:

  • Write-Host在屏幕上显示消息,但不会将其写入日志

  • 写入输出将消息写入日志,但不会在屏幕上显示。

Write-Host被认为是有害的。您可以在 Write-Host Considered Harmful 中查看详细说明。

答案 4 :(得分:0)

您可以通过以下示例了解两个cmd之间的区别:

写入主机“ msgtxt” |获取服务 在上面运行时,您将输出为“ msgtxt”

写输出“ msgtxt” |获取服务 在上面运行时,由于msgtxt不是任何服务的名称,您将收到一个错误。(理想情况下)(因为您正在将其写入管道,并且将其作为输入传递给Get-Service)