You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell中捕获.exe程序输出?多方法尝试均失败

解决PowerShell无法捕获外部程序输出的问题

可能的原因与解决方案

1. 修正cmd /c的重定向语法

你之前的cmd /c调用格式错误,2>&1需要作为cmd命令的一部分,而非独立参数。正确写法需把整个命令用引号包裹:

$cmd = "X:\app.exe"
$output = cmd /c "$cmd 2>&1"

这样cmd才会识别2>&1是将标准错误重定向到标准输出的指令。

2. 尝试PowerShell原生的全流重定向

如果程序输出未走标准输出/错误流,而是直接写入控制台,可使用*>&1将所有流(包括控制台输出)重定向到标准输出:

$output = & $cmd *>&1

3. 通过文件中转捕获输出

部分程序会绕过标准流,直接调用Win32 API写入控制台,此时内存捕获会失效,需先将输出写入文件再读取:

$cmd = "X:\app.exe"
$stdoutPath = Join-Path $env:TEMP "stdout.txt"
$stderrPath = Join-Path $env:TEMP "stderr.txt"

Start-Process -FilePath $cmd -NoNewWindow -Wait `
  -RedirectStandardOutput $stdoutPath `
  -RedirectStandardError $stderrPath

$output = Get-Content $stdoutPath, $stderrPath
Remove-Item $stdoutPath, $stderrPath

4. 检查PowerShell版本与环境差异

你提到另一台电脑可正常捕获,说明当前环境可能存在版本差异:

  • 尝试升级到PowerShell 7.x,它对外部程序输出的处理更一致
  • 确认当前是Windows PowerShell(5.x)还是PowerShell Core,两者在流重定向的细节上有区别

5. 验证程序输出的流向

可借助Process Monitor等工具查看程序调用的输出API,确认它是使用WriteFile(标准流)还是WriteConsole(直接控制台写入)。如果是后者,只能通过文件中转或第三方工具捕获。


内容的提问来源于stack exchange,提问作者Alfyn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 07:05:00