输出消息有多种不同的方法。通过输出某物通过Write-Host,,,,Write-Output, 或者[console]::WriteLine

我还注意到,如果我使用:

write-host "count=" + $count

+将其包含在输出中。为什么?不应该评估表达式以在将其写出之前产生单个串联字符串吗?

答案

Write-Output当您要在管道中发送数据时,应使用,但不一定要在屏幕上显示。管道最终将将其写入out-default如果没有别的首先使用它。

Write-Host当您想做相反的情况时,应使用。

[console]::WriteLine本质上是什么Write-Host在幕后做。

运行此演示代码并检查结果。

function Test-Output {
    Write-Output "Hello World"
}

function Test-Output2 {
    Write-Host "Hello World" -foreground Green
}

function Receive-Output {
    process { Write-Host $_ -foreground Yellow }
}

#Output piped to another function, not displayed in first.
Test-Output | Receive-Output

#Output not piped to 2nd function, only displayed in first.
Test-Output2 | Receive-Output 

#Pipeline sends to Out-Default at the end.
Test-Output 

您需要将串联操作封闭在括号中,以便PowerShell在将参数列表列出之前处理串联Write-Host,或使用字符串插值

write-host ("count=" + $count)
# or
write-host "count=$count"

顺便说一句 - 看这个视频杰弗里·斯内弗(Jeffrey Snover)解释了管道的工作原理。回到我开始学习PowerShell时,我发现这是管道如何工作的最有用的解释。

来自: stackoverflow.com