约 2316 字

约 12 分钟

#输入输出与重定向

PowerShell 把命令的输出分为多个流(stream),并用不同的 Write-* 命令写入。理解数据流与重定向,有助于控制信息显示在哪里、是否写入文件,以及如何屏蔽不需要的输出。

#输出命令

命令用途
Write-Output向管道输出对象,是默认的输出方式
Write-Host直接写入主机显示,主要用于交互提示
Write-Verbose输出详细过程信息,默认不显示
Write-Warning输出警告信息
Write-Error输出错误信息,默认不终止脚本
> Write-Output '普通输出'
> Write-Host '显示在主机上'
> Write-Verbose '仅在启用详细输出时显示'
> Write-Warning '磁盘空间不足'
> Write-Error '处理失败'
  • Write-Output 的结果可以继续传给管道中的下一个命令。
  • Write-Host 的输出不会进入成功流,因此不能被赋值或通过管道处理;从 PowerShell 5 起它写入信息流。
  • Write-Verbose 需要配合 -Verbose 或 $VerbosePreference = 'Continue' 才会显示。
  • Write-Error 默认是非终止错误,可用 -ErrorAction Stop 转为终止错误。

#重定向

PowerShell 使用与常见 Shell 类似的重定向符号:

> Get-Process > processes.txt
> Get-Process >> processes.txt
> Get-ChildItem missing 2> error.txt
> Get-Process *> all.txt
> Get-ChildItem missing 2>&1
  • > 把成功流写入文件,覆盖原有内容。
  • >> 追加到文件末尾。
  • 2> 只写入错误流。
  • *> 把所有流写入同一个文件。
  • 2>&1 把错误流合并到成功流,便于统一处理。

流编号如下:

编号流
1成功输出
2错误
3警告
4详细
5调试
6信息

因此 3> 可以单独保存警告,6> 可以捕获 Write-Host 写入的信息流。

#Out-File

Out-File 提供比重定向更明确的参数:

> Get-Process | Out-File -FilePath processes.txt
> Get-Process | Out-File -FilePath processes.txt -Append
> 'text' | Out-File -FilePath note.txt -Encoding utf8
  • -Append 追加而不是覆盖。
  • -Encoding 指定编码,常用值有 utf8、utf8NoBOM、ascii。
  • 在 PowerShell 7 中,> 和 Out-File 默认使用 UTF-8。

#Tee-Object

Tee-Object 在把结果写入文件或变量的同时,仍将结果保留在管道中:

> Get-Process | Tee-Object -FilePath processes.txt | Select-Object -First 3
> Get-Process | Tee-Object -Variable procs | Measure-Object

#丢弃输出

$null 是一个特殊变量,把输出重定向到它即可丢弃:

> Start-Process pwsh > $null
> $null = Get-Process

#推荐阅读

更新: 2026/11/2

作者: planc

创建: 2026/11/2