PowerShell中的Write-Output和Write-Host命令之间的区别?

我们是否曾经想过,Write-OutputWrite-Host都用于打印字符串或命令的输出,那么它们之间有什么区别?

示例

PS C:\> Write-Output "Test String"
Test String
PS C:\> Write-Host "Test String"
Test String

输出保持不变。

第一个主要区别是使用管道结构存储输出。例如,Write-Output和Write-Host都支持管道结构,

示例

"Test String" | Write-Output
Test String

"Test String" | Write-Host
Test String

输出保持不变。

第一个主要区别是使用管道结构存储输出。例如,Write-Output和Write-Host都支持管道结构,

示例

"Test String" | Write-Output
Test String

"Test String" | Write-Host
Test String

但是,当我们存储输出时,它将显示两个命令之间的差异。

输出结果

$a = "Test String" | Write-Output

Get-Variable a

Name Value
---- -----
a Test String


$b = "Test String" | Write-Host
Test String

Get-Variable b

Name Value
---- -----
b

在上面的示例中,当字符串输出存储到变量中时,Write-Output可以存储它,而Write-Host在控制台中显示输出,而输出未分配给变量,因为Write-Host直接向控制台生成输出而Write-Output会在变量内部生成并存储输出。因此,如果脚本编写者不知道控制台是否正常运行远程主机,则不建议使用Write-Host进行PowerShell远程处理。

另一个区别是,使用Write-Host cmdlet,可以用背景和前景(文本)颜色装饰输出,而在Write-Output命令中则无法实现。

示例

Write-Host "Dark green backgound with White text" -BackgroundColor DarkGreen -ForegroundColor White

Dark green backgound with White text