在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