最直接常用的方法是使用 add-content cmdlet,它专为追加设计,接收管道输入并逐行追加到文件末尾,不覆盖原内容,支持自动建目录,推荐显式指定 -encoding utf8 避免乱码。
powershell 中将管道数据追加写入文本文件,最直接、常用的方法是使用 add-content cmdlet,它专为“追加”设计,语义清晰、行为可靠。
用 Add-Content 追加管道输出
Add-Content 接收管道输入,把每条对象按字符串形式(默认调用 .ToString())逐行追加到目标文件末尾。它不会覆盖原内容,也不需要额外参数控制追加逻辑。
- 基本写法:命令 | Add-Content -Path "C:\log.txt"
- 支持中文和特殊字符,但若出现乱码,建议显式指定编码:
命令 | Add-Content -Path "C:\log.txt" -Encoding UTF8 - 如果目标路径不存在,Add-Content 会自动创建文件及其上级目录(需有权限)
用重定向运算符 >> 追加(简洁但需注意编码)
PowerShell 支持类 Unix 的 >> 运算符,功能等价于 Add-Content,语法更短:
- 命令 | Out-File -FilePath "C:\log.txt" -Append(不推荐,-Append 是 Out-File 的冗余参数,实际应优先用 Add-Content)
- 更常见写法:命令 >> "C:\log.txt"
- ⚠️ 注意:
>>在 Windows PowerShell 5.1 默认用 UTF-16LE 编码,在 PowerShell 7+ 默认用 UTF8NoBOM,跨版本混用可能导致中文显示异常。如需兼容,建议改用Add-Content -Encoding UTF8
避免踩坑的实用建议
追加操作看似简单,但容易因对象类型或编码引发问题:
- 管道中若含复杂对象(如
Get-Process输出),Add-Content会写入格式化后的字符串(类似屏幕显示效果),适合日志;如需结构化数据(可后续读取分析),应改用Export-Csv -Append或ConvertTo-Json | Add-Content - 不要用
Set-Content追加——它只会覆盖整个文件,不是追加 - 若需在追加前加时间戳或分隔线,可组合使用:
"--- $(Get-Date) ---" | Add-Content -Path "C:\log.txt"; Get-Service | Add-Content -Path "C:\log.txt"











