121

PowerShell 中的Write-HostWrite-Output有什么区别?

像...

Write-Host "Hello World";

Write-Output "Hello World";
4

5 回答 5

108

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

PS> Get-Service

将与以下内容相同:

PS> Get-Service | Write-Output
于 2013-11-03T15:08:41.873 回答
45

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 如何处理管道的输出,那么它将被发送到 out-default,这通常是控制台,因此最终结果看起来相同.

于 2013-11-03T15:12:36.973 回答
10

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

Write-Host取决于主机。在控制台Write-Host本质上是在做[console]::WriteLine. 有关更多信息,请参阅内容。

于 2013-11-03T15:10:17.960 回答
8

Write-Host 和 Write-Output 之间的另一个区别:

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

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

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

于 2015-05-28T09:27:29.530 回答
0

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

写主机“msgtxt”| Get-Service 在上面运行时,您将获得输出为“msgtxt”

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

于 2020-09-29T09:12:17.963 回答