154

我对打印(回显)到控制台的各种方式有些困惑。我已经看到有多种方法可以将输出写入控制台,例如:

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意图是什么?

4

2 回答 2

111

PowerShell 的默认行为只是将掉出管道的所有内容转储,而不会被另一个管道元素拾取或分配给变量(或重定向)到Out-Host. 做什么Out-Host显然取决于主机。

仅仅让事情脱离管道并不能替代Write-Host主机应用程序中输出文本的唯一原因。

如果要输出,请使用Write-*cmdlet。如果您想从函数中返回值,那么只需在没有任何 cmdlet 的情况下将对象转储到那里。

于 2012-05-31T10:46:10.200 回答
63

中间一个写入管道。Write-HostOut-Host写入控制台。'echo' 也是Write-Output写入管道的别名。写入控制台的最佳方式是使用Write-Hostcmdlet。

当一个对象被写入管道时,它可以被链中的其他命令使用。例如:

"hello world" | Do-Something

但这不起作用,因为Write-Host写入控制台而不是管道(Do-Something 不会得到字符串):

Write-Host "hello world" | Do-Something
于 2012-05-31T10:55:58.557 回答