【问题标题】:How to write to the console in PowerShell?如何在 PowerShell 中写入控制台?
【发布时间】:2012-06-05 14:46:48
【问题描述】:

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

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

【问题讨论】:

标签: powershell


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    "hello world" | Do-Something
    

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

    Write-Host "hello world" | Do-Something
    

    【讨论】:

    • 这个答案在技术上是正确的,但我怀疑它会导致新手 PowerShell 用户误入歧途。有效 PowerShell 的第一条规则是生成在管道中有用的输出。如果你经常使用 Write-Host,那你可能做错了。
    • 好吧,这不是OP问的,如何写入控制台?写入主机和写入管道是有区别的,必须知道它们各自做什么。我将通过澄清更新我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    相关资源
    最近更新 更多