首页/系统/Windows 运维速查/Set-Content / Out-File 写文件
PowerShell 基础66 条

Set-Content / Out-File 写文件

把文本或对象写入文件:Set-Content 原样写值、Out-File 写格式化输出,注意两者默认编码差异。

Windows 运维速查系统更新于 2026-10-13

两个写文件命令

Set-Content 与 Out-File 都把内容写进文件,但机制不同:Set-Content 按值写入,把对象转成字符串原样落盘;Out-File 按终端显示的格式写入,会受表格渲染与列宽影响。两者在 Windows PowerShell 5.1 与 PowerShell 7 上的默认编码也不一样,跨系统读写时必须显式指定。

基本信息

适用平台Windows PowerShell 5.1 与 PowerShell 7
语法Set-Content -Path 文件 -Value 内容 [-Encoding UTF8];<对象> | Out-File 文件 [-Width 300] [-Append]
默认编码5.1 的 UTF8 会带 BOM;Out-File 默认 UTF-16LE;7.x 默认无 BOM 的 UTF8
追加写入Add-Content 或 Out-File -Append
无 BOM 写法[IO.File]::WriteAllText,或 7.x 的 utf8NoBOM

典型使用场景

  • 写状态标记文件,让后续脚本判断上一步流程是否完成
  • 把命令输出保存成日志或报告留档
  • 生成配置文件清单,交给其他工具读取
  • 追加写入运行日志,避免覆盖历史记录
  • 输出给 Excel 或 Windows 工具查看时使用带 BOM 的编码

常用示例

常用示例
'ok' | Set-Content D:\Logs\status.txt -Encoding UTF8
# 追加写入,不覆盖已有内容
Add-Content D:\Logs\status.txt -Value ('完成 ' + (Get-Date)) -Encoding UTF8
# 对象输出到文件,加宽避免截断
Get-Process | Out-File D:\Logs\proc.txt -Encoding UTF8 -Width 300
# 只要无 BOM 的 UTF-8,5.1 需要借 .NET 方法
[IO.File]::WriteAllText('D:\Logs\plain.txt', 'ok', (New-Object Text.UTF8Encoding $false))
# PowerShell 7 可直接指定无 BOM
Set-Content D:\Logs\plain7.txt -Value 'ok' -Encoding utf8NoBOM

写法对照

写法机制适用场景
Set-Content按值写入,不做格式化写简单文本与单个值
Out-File按终端显示格式写入保存命令输出与报告
Add-Content追加到文件末尾日志累积
Export-Csv按列写结构化数据表格数据交换
[IO.File]::WriteAllText精确控制编码与字节必须无 BOM 的场合
5.1 中 -Encoding UTF8 会写入 BOM,部分程序(尤其是 Linux 侧脚本与解析器)会把 BOM 当成内容的第一部分。需要无 BOM 时用 .NET 方法写,或升级到 PowerShell 7 使用 utf8NoBOM。
Out-File 默认按控制台宽度截断长行,导出对象时若不加 -Width,日志里会出现省略号,事后排查就看不到完整信息了。
遇到别人打开文件乱码时,先确认写入方是 5.1 还是 7、用的哪个编码名,再决定读取方怎么解码;只改读取端经常治不好,不如在写入端一次性把编码定死并写进脚本注释。

易错点

  • Out-File 在 5.1 默认使用 UTF-16LE 编码,其他系统读取会显示乱码,写入时必须显式指定 -Encoding
  • -Encoding UTF8 在 5.1 会带 BOM,被 Linux 程序当作正文内容处理,跨平台交换应改用无 BOM 写法
  • Out-File 默认宽度会截断长行,导出的日志出现省略号后原始信息就丢了
  • 两个命令默认整体覆盖目标文件,忘记改用追加会把历史记录冲掉
  • 同一文件混用不同编码追加会产生多段编码,读取时前半段正常后半段乱码

数据来源与参考

  • Microsoft Learn:Set-Content
  • Microsoft Learn:Out-File

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌