在PowerShell中写入控制台的最佳方法

时间:2012-05-31 10:41:43

标签: powershell

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

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的别名还是意图是什么?

2 个答案:

答案 0 :(得分:90)

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

只是让事情脱离管道而不是替代Write-Host,这是因为在主机应用程序中输出文本的唯一原因而存在。

如果您想要输出,请使用Write-* cmdlet。如果要从函数返回值,则只需将对象转储到那里而不使用任何cmdlet。

答案 1 :(得分:48)

中间人写入管道。 Write-HostOut-Host写入控制台。 'echo'是Write-Output的别名,它也写入管道。写入控制台的最佳方法是使用Write-Host cmdlet。

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

"hello world" | Do-Something

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

Write-Host "hello world" | Do-Something