小编典典

“Write-Host”、“Write-Output”或“[console]::WriteLine”有什么区别?

all

有许多不同的方式来输出消息。Write-Host通过、Write- Output或输出某些内容之间的有效区别是什么[console]::WriteLine

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

write-host "count=" + $count

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


阅读 139

收藏
2022-06-25

共1个答案

小编典典

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
时,我发现这是对管道如何工作的最有用的解释。

2022-06-25