我使用下面的脚本并行运行两个程序(第 3 行和第 5 行;第 1 行 只是使文件打开 PowerShell,执行命令并再次关闭它)。不幸的是,脚本在第 3 行暂停,并且在我关闭第一个程序之前不会运行第二个程序。
文件
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"
.\ngrok 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"
这是我运行代码的视频: https://youtu.be/1FBJTcBXWTM
如您所见,当我运行 CMD 文件时,tcp 门户会连接,但只有在我使用(cmd + c)退出控制台后,门户才会关闭并启动服务器。
如何使用我的脚本并行/异步运行这两个程序?
像
.\ngrok tcp --region=us --remote-addr=9.tcp.ngrok.io:22648 22
这样的直接调用将使您的脚本等待直到该过程完成。 Start-Process
相反,默认情况下不会等待(不过您可以使用 -Wait
开关让它等待)。
要将参数传递给要使用
Start-Process
运行的可执行文件,您可以使用 -ArgumentList
参数。因此,只需将直接调用替换为:
Start-Process .\ngrok -ArgumentList "tcp --region=us --remote-addr=9.tcp.ngrok.io:22648 22"
你就可以开始了。