Windows 写主机和写输出之间的PowerShell差异?

Windows 写主机和写输出之间的PowerShell差异?,windows,powershell,Windows,Powershell,PowerShell中与的区别是什么 像 Write-Host "Hello World "; Write-Output "Hello World"; 简而言之,Write Host写入控制台本身。将其视为中的MsgBoxWrite Output写入管道,因此下一个命令可以接受它作为输入。写入对象不需要使用写入输出,因为写入输出是隐式为您调用的 PS> Get-Service 将与以下内容相同: PS> Get-Service | Write-Output Write Out

PowerShell中与的区别是什么

Write-Host "Hello World ";

Write-Output "Hello World";

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

PS> Get-Service
将与以下内容相同:

PS> Get-Service | Write-Output

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

写入主机
依赖于主机。在控制台中,
写入主机
实际上正在执行
[console]::WriteLine

有关更多信息,请参阅

写入输出将输出发送到管道。从那里,它可以通过管道传输到另一个cmdlet或分配给变量。 写入主机将其直接发送到控制台

$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,这通常是控制台,因此最终结果显示相同

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

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

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


写入主机被认为是有害的。您可以在中查看详细说明。

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

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

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

只是为了向未来的读者澄清<代码>写入输出发送对象。这次它是一个字符串,但通常它会发送对象,通常不需要使用,因为这是输出结果/数据的默认方式:)我发现写输出更有害。如何确保函数实际返回预期结果,而不是命令中意外的垃圾输出?如果您自己运行脚本,我认为
Write output
会在屏幕上显示消息。因此,我不确定“Write Output将消息写入日志,但它不会在屏幕上显示”的含义。如果在函数中使用Write Output返回信息,则无法将其用于将输出捕获到变量中。它甚至可能破坏产量。写主机更适合这种情况。@夏季写输出有害,写信息非常棒。写入输出是具有返回值的Powershell函数的敌人。,“从Windows Powershell 5.0开始,写入主机是写入信息的包装器,这允许您使用写入主机向信息流发送输出。”Powershell以这种方式非常混乱。阅读此链接有助于了解powershell中提到的管道,以及如何从函数返回值。“PowerShell中的return关键字具有误导性–老实说,我避免使用它,因为它根本不像大多数编程语言那样工作。”-如果调用的函数具有返回值,请不要在该函数中使用Write Output,否则将返回该字符串而不是返回值。这会造成各种破坏。