PowerShell中的写主机和写输出之间有什么区别?
喜欢…
Write-Host "Hello World "; Write-Output "Hello World";
简而言之, Write-Host
写入控制台本身。 把它想象成VBScript中的MsgBox。 另一方面,写Write-Output
写入流水线,所以下一个命令可以接受它作为输入。 您不需要使用Write-Output
来写入对象,因为Write-Output
是隐式地为您调用的。
PS> Get-Service
会和以下一样:
PS> Get-Service | Write-Output
写输出将输出发送到管道。 从那里它可以被传送到另一个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-Output
通过管道将数据作为对象发送。 在这个问题的例子中,它只是传递一个字符串。
write-host
是主机相关的。 在控制台write-host
本质上是做[console]::WriteLine
。 看到这个更多的信息。
写主机和写输出的另一个区别是:
写主机在屏幕上显示消息,但不写入日志
写输出将消息写入日志,但不显示在屏幕上。
写主机被认为是有害的。 您可以在写主机认为有害的情况下看到详细的解释。