如何在每分钟循环Powershell直到条件成立?

时间:2018-01-28 21:22:22

标签: c# rest powershell loops scripting

我刚刚开始编写Powershell脚本。我有一个项目,我正在进行负载测试。我运行测试并根据测试结果生成报告。我正在使用的工具通过他们的API完成了这一切。所以我有3个Rest API,我正在使用Powershell脚本发送呼叫。

第一次调用:启动负载测试,但在配置中设置了多次迭代(可能会运行几个小时):

Invoke-RestMethod -Method Post -Uri $StartTestUrl -ContentType "application/json" -OutVariable StartTestResponse -Body $StartTestRequestBody | ConvertTo-Json

第二次调用:获取刚刚运行/或仍在运行的负载测试的状态:

Invoke-RestMethod -Method Post -Uri $GetStatusUrl -ContentType "application/json" -OutVariable GetStatusResponse -Body $GetStatusRequestBody | ConvertTo-Json

第3次调用:从完成的测试运行生成报告:

Invoke-RestMethod -Method Post -Uri $GenerateReportUrl -ContentType "application/json" -OutVariable GenerateReportResponse -Body $GenerateReportRequestBody | ConvertTo-Json

目标:我希望能够在Powershell中编写DO-WHILE循环或其他循环,通过每分钟调用第2个api来检查测试状态" DONE&# 34;在回应中。然后开始第3次调用,因为如果测试没有完成,我就无法生成报告。

示例:

foreach(var minute in minutes)
{

    // if(status.Done)
    // {
    //   CALL GenerateReport
    // }
    // else
    //{
        //keep checking every minute 
    //}
}

2 个答案:

答案 0 :(得分:1)

您可以使用do-while循环执行此操作。在此示例中,假设$GetStatusResponse只是$true / $false值。实际上,您需要修改代码以检查实际的" DONE"消息。

#1
Invoke-RestMethod -Method Post -Uri $StartTestUrl -ContentType "application/json" -OutVariable StartTestResponse -Body $StartTestRequestBody | ConvertTo-Json

do{
    # 2
    Invoke-RestMethod -Method Post -Uri $GetStatusUrl -ContentType "application/json" -OutVariable GetStatusResponse -Body $GetStatusRequestBody | ConvertTo-Json

    if($GetStatusResponse -eq $False){
        Start-Sleep -Seconds 60
    }

}while($GetStatusResponse -eq $False)

# 3
Invoke-RestMethod -Method Post -Uri $GenerateReportUrl -ContentType "application/json" -OutVariable GenerateReportResponse -Body $GenerateReportRequestBody | ConvertTo-Json

答案 1 :(得分:-1)

开始 - 睡眠 - 秒60

将暂停执行1分钟

MS link to cmdlet