在PowerShell中写入控制台的最佳方法
我对打印(回显)到控制台的各种方法有点困惑。 我已经看到,有多种方式将输出写入控制台,例如:
Write-Host "Hello world1" "Hello World2" Out-Host -InputObject "Hello World3"
所有三种方式将打印到控制台。 中间的一个更简单,更简单,更易于使用。 我也发现,当你写一个函数如:
function GetValues() { "1" "2" }
它仍然返回stream水线中的两个string:
而且我仍然可以打印出这些值:
foreach ($s in GetValues) { Write-Host "s: " $s }
我发现的事情是,只使用带引号的string不会总是出现在自定义主机上,而且我不得不使用写主机来获取要在自定义主机上打印的值。
不知何故,我发现这令人困惑。 "Print something"
应该是Write-Host
的别名,还是意图是什么?
PowerShell的默认行为只是将所有不属于pipe道的内容转储出去,而不会被另一个pipe道元素占用,或者被分配给一个variables(或redirect到Out-Host
。 Out-Host
做的显然是主机依赖的。
只是让东西掉出pipe道不能替代Write-Host
,因为在主机应用程序中输出文本的唯一原因。
如果你想要输出,那么使用Write-*
cmdlet。 如果您想要从函数返回值,则只需在没有任何cmdlet的情况下将对象转储到那里。
中间的一个写入pipe道。 Write-Host
和Out-Host
写入控制台。 'echo'是Write-Output
的别名,写入pipe道也是如此。 写入控制台的最佳方法是使用Write-Host
cmdlet。
当一个对象被写入pipe道时,它可以被链中的其他命令占用。 例如:
"hello world" | Do-Something
但是这不起作用,因为Write-Host
写入控制台,而不是pipe道(Do-Something不会得到string):
Write-Host "hello world" | Do-Something