我对打印(回显)到控制台的各种方法有点困惑。我已经看到有多种方法可以将输出写入控制台,例如:
Write-Host "Hello world1"
"Hello World2"
Out-Host -InputObject "Hello World3"
所有三种方式都将打印到控制台。中间的一个更简单,更简洁,更容易使用。我还发现当你编写一个函数时:
function GetValues()
{
"1"
"2"
}
它仍会在管道中返回两个字符串:
我仍然可以打印出值:
foreach ($s in GetValues)
{
Write-Host "s: " $s
}
我发现的事情是,仅使用引用的字符串并不总是出现在自定义主机上,而且我必须使用Write-Host来获取要在自定义主机上打印的值。
不知怎的,我发现这令人困惑。 "Print something"
应该是Write-Host
的别名还是意图是什么?
答案 0 :(得分:90)
PowerShell的默认行为只是转储掉管道外的所有内容,而不会被另一个管道元素拾取或被分配给变量(或重定向)到Out-Host
。 Out-Host
的作用显然取决于主机。
只是让事情脱离管道而不是替代Write-Host
,这是因为在主机应用程序中输出文本的唯一原因而存在。
如果您想要输出,请使用Write-*
cmdlet。如果要从函数返回值,则只需将对象转储到那里而不使用任何cmdlet。
答案 1 :(得分:48)
中间人写入管道。 Write-Host
和Out-Host
写入控制台。 'echo'是Write-Output
的别名,它也写入管道。写入控制台的最佳方法是使用Write-Host
cmdlet。
当一个对象被写入管道时,它可以被链中的其他命令使用。例如:
"hello world" | Do-Something
但是这不起作用,因为Write-Host
写入控制台,而不是管道(Do-Something不会得到字符串):
Write-Host "hello world" | Do-Something