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

Windows计划任务中PowerShell脚本终止进程并捕获exe输出的问题

问题分析与解决

问题根源

你直接在Start-Process后用>> $logFile的写法有误:这种方式会把Start-Process命令自身的输出重定向到日志,但Start-Process默认无输出,同时会吃掉-PassThru参数本该返回的进程对象,导致$process变量为空,自然无法通过$process.Id终止进程。

修正后的脚本

要同时实现捕获JustWaitKey.exe的控制台输出、保留进程对象用于后续终止,需使用Start-Process自带的-RedirectStandardOutput和-RedirectStandardError参数:

$logFile = "E:\BatchFiles\Log\JustWaitKey.txt"
$exeOutputLog = "E:\BatchFiles\Log\JustWaitKey_Output.txt"  # 单独存储exe输出,也可与主日志合并

"We're about to run our test program" >> $logFile

# 用Redirect参数捕获exe的标准输出和错误,同时保留PassThru返回的进程对象
$process = Start-Process -FilePath "E:\BatchFiles\JustWaitKey.exe" `
    -WorkingDirectory E:\BatchFiles `
    -RedirectStandardOutput $exeOutputLog `
    -RedirectStandardError $exeOutputLog `
    -PassThru

Start-Sleep -Seconds 5
Stop-Process -Id $process.Id

# 若需将exe输出合并到主日志
Get-Content $exeOutputLog >> $logFile
"Our test program has completed" >> $logFile

额外优化建议

  • 如果JustWaitKey.exe的处理时长不固定,建议把固定等待的Start-Sleep换成带超时的Wait-Process,比如Wait-Process -Id $process.Id -Timeout 300(超时300秒),避免不必要的等待或提前终止。
  • 若希望exe输出直接追加到主日志,可将$exeOutputLog设为与$logFile相同路径,注意日志内容的顺序(exe输出会先写入,之后再追加主日志消息)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 00:53:18