如何让外部程序不暂停PowerShell脚本并实现并行运行?
解决脚本并行运行两个程序的问题
你的脚本之所以会阻塞,是因为直接调用.\ngrok时,PowerShell会等待该进程完全退出后才执行后续命令。要实现并行运行,只需将ngrok的启动方式改为异步调用即可。
修改后的完整start.cmd脚本:
@PowerShell -ExecutionPolicy Bypass -Command Invoke-Expression $('$args=@(^&{$args} %*);'+[String]::Join(';',(Get-Content '%~f0') -notmatch '^^@PowerShell.*EOF$')) & goto :EOF Set-Location -LiteralPath "D:\ngrok" Start-Process -FilePath ".\ngrok" -ArgumentList "tcp --region=us --remote-addr=9.tcp.ngrok.io:22648 22" Set-Location -LiteralPath "C:\Users\apeal\OneDrive\Desktop\SSC" Start-Process -FilePath "run.bat"
核心修改说明:
- 将第3行的直接执行
.\ngrok tcp ...替换为Start-Process命令,让ngrok在独立进程中异步运行,不会阻塞后续的run.bat启动命令。 - 通过
-ArgumentList参数传递ngrok所需的全部命令行参数,确保功能不受影响。
如果需要让ngrok在当前控制台窗口运行(而非新窗口),可以添加-NoNewWindow参数:
Start-Process -FilePath ".\ngrok" -ArgumentList "tcp --region=us --remote-addr=9.tcp.ngrok.io:22648 22" -NoNewWindow
内容的提问来源于stack exchange,提问作者A potato
相关产品推荐
相关产品推荐

