Powershell等待dotnet运行以在某个端口上启动应用程序

时间:2019-05-14 15:59:56

标签: powershell

我正在编写一个脚本,该脚本应该一个接一个地运行两个dotnet应用程序。根据它们的launchSettings.json

,一个在端口5000上,第二个在端口5001上

到目前为止,这是运行应用程序的脚本:

    $app1ProjectFolder = '../src/App1'
    $app2ProjectFolder = '../src/App2'

    Write-Host "STARTING APP1" -foreground Green

    Push-Location $app1ProjectFolder 

    $dotnetRunCommandApp1 = 'run'
    $app1Process = Start-Process dotnet -ArgumentList $dotnetRunCommandApp1 -PassThru

    Pop-Location

    Write-Host "STARTING APP2" -foreground Green

    Push-Location $app2ProjectFolder 

    $dotnetRunCommandApp2 = 'run'
    $app2Process = Start-Process dotnet -ArgumentList $dotnetRunCommandApp2 -PassThru

    Pop-Location

我需要的是脚本在启动第二个应用程序之前等待第一个应用程序完成启动或可在其指定端口上访问。

2 个答案:

答案 0 :(得分:0)

Start-Process具有-wait开关,该开关应防止脚本继续执行直到完成。

$app1Process = Start-Process dotnet -ArgumentList $dotnetRunCommandApp1 -PassThru -wait

根据Start-Process article

  

指示此cmdlet在接受更多输入之前等待指定的过程及其后代完成。此参数隐藏命令提示符或保留窗口,直到进程完成。

答案 1 :(得分:0)

您可以使用:

while (!(Test-NetConnection localhost -Port 5000).TcpTestSucceeded) { Start-Sleep 1 }

无限期等待端口准备就绪。

您可以添加最长等待时间,例如说该应用程序仍在运行,但无法收听或被防火墙保护。