在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-HostOut-Host做的显然是主机依赖的。

只是让东西掉出pipe道不能替代Write-Host ,因为在主机应用程序中输出文本的唯一原因。

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

中间的一个写入pipe道。 Write-HostOut-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