PowerShell ISE 中 Echo 和 Write-Host 之间的区别

PowerShell ISE 中 Echo 和 Write-Host 之间的区别

我开始学习(初学者)PowerShell脚本。我发现echoWrite-Host都可以在控制台屏幕上显示输出,那么它们之间有什么区别?我读到这个问题来自 Stack Overflow,但我无法理解它的答案。我想用简单的术语了解它们之间的区别。

答案1

我将尝试从哲学而非技术的角度向您解释这一点。

  • Write-Host用于在控制台中显示信息。它不会写入输出流
  • echo,实际上是 的别名,Write-Output用于输出操作的对象

请考虑以下示例:

此处的代码:

$Results = 0..10 | ForEach-Object {
    Write-Host "Current Number: $_"
    $_
}

将会在控制台输出以下内容:

Current Number: 0
Current Number: 1
Current Number: 2
Current Number: 3
Current Number: 4
Current Number: 5
Current Number: 6
Current Number: 7
Current Number: 8
Current Number: 9
Current Number: 10

如果你现在检查变量$Results,你会看到:

PS C:\WINDOWS\system32> $Results
0
1
2
3
4
5
6
7
8
9
10

这些数字被保存到变量中,因为$_第 3 行被发送到输出流。Write-Host但是,被发送到主机,因此它显示在控制台中,但不显示在变量中,因为它在输出流中没有创建任何内容。

Write-Host如果我们改为Write-Output?,会发生什么情况:

$Results = 0..10 | ForEach-Object {
    Write-Output "Current Number: $_"
    $_
}

如果我们运行这个,我们将不会在控制台中看到任何内容,因为整个输出流都保存在$Results变量中。如果我们现在检查这个变量,它看起来是这样的:

PS C:\WINDOWS\system32> $Results
Current Number: 0
0
Current Number: 1
1
Current Number: 2
2
Current Number: 3
3
Current Number: 4
4
Current Number: 5
5
Current Number: 6
6
Current Number: 7
7
Current Number: 8
8
Current Number: 9
9
Current Number: 10
10

因此,如您所见,如果您想打印简单的信息,而这些信息除了通知您代码当前正在做什么之外,实际上没有其他用处,您可以使用Write-Host

如果你想输出任何东西到输出流,你可以使用Write-Output

但请稍等!还有更多。

实际上你并不需要Write-Output。我编写 PowerShell 脚本已有大约 5、6 年了,但从未使用过它。为什么?因为写入输出流是 PowerShell 中的默认设置。如果你再次查看我们的示例,第三行$_总是神奇地进入输出流,即使我没有使用Write-Output

总结一下:用来Write-Host在控制台中显示信息,我建议不要使用echo/,Write-Output因为它是默认的。

答案2

正如所说,Write-OutputAKAecho输出对象

将指定的对象发送到管道中的下一个命令。如果该命令是管道中的最后一个命令,则对象将显示在控制台中。

因此,如果您在屏幕上看到一些文本,那只是因为您的命令是管道中的最后一个。但每个对象都打印在单独的行上,因此您可以轻松看到的最大区别是它echo不会在同一行中打印其参数

PS C:\用户>echo 这是一个字符串
A
细绳
PS C:\用户>Write-Host 这是一个字符串
这是一个字符串

相关内容