tee-object 是 powershell 中实现“一边转发、一边存档”的 cmdlet,可同时将管道对象输出到控制台和文件(用 -filepath)或变量(用 -variable),支持覆盖写入、-append 追加及后续管道处理。
tee-object 是 powershell 中专为“一边转发、一边存档”设计的 cmdlet,核心作用就是把管道中的对象**同时发往两个地方**:一个继续走管道(比如显示在控制台),另一个写入文件或赋值给变量。
基础用法:输出到屏幕 + 保存为文件
最常见场景是运行命令后既想看到实时结果,又想留一份日志。例如查看进程并同时保存:
Get-Process | Tee-Object -FilePath "processes.txt"- 执行后,控制台会正常显示所有进程列表,同时
processes.txt文件被创建并写入完全相同的内容。 - 注意:默认是覆盖写入,重复运行会清空旧内容。
追加模式:避免覆盖已有日志
如果希望每次运行都把新内容加到文件末尾(比如记录多次启动日志),加上 -Append 参数即可:
myApp.exe | Tee-Object -FilePath "log.txt" -Append- 适合批处理脚本中循环调用,或需要累积记录的场景。
进阶用法:同时存文件 + 传给下一个命令
Tee-Object 不会中断管道流,它只是“分叉”一份副本。因此你可以在保存之后继续处理原始数据:
Get-ChildItem *.log | Tee-Object -FilePath "filelist.txt" | Where-Object {$_.Length -gt 1024}- 这行命令做了三件事:列出所有 .log 文件 → 同时保存文件名列表到
filelist.txt→ 再筛选出大于 1KB 的那些文件并输出。 - 也就是说,
Tee-Object后面还能接其他 cmdlet,不只限于结尾显示。
保存到变量而非文件
有时你想把中间结果暂存起来做后续分析,而不是立刻写硬盘:
Get-Service | Tee-Object -Variable svcList | Where-Object {$_.Status -eq 'Running'}- 运行完后,变量
$svcList就包含了全部服务对象(未过滤前的完整集合),可随时调用:$svcList.Count或$svcList | Sort-Object Name。











