[CmdletBinding()] param( [Parameter(Mandatory = $true)][string]$ApiKey, [Parameter(Mandatory = $true)][string]$BaseUrl, [Parameter(Mandatory = $true)][string]$RunId, [Parameter(Mandatory = $true)][string]$PollResultUrl, [string]$TrackItemIds, [string]$TrackItemNames, [int]$ExpectedRunTime = 3600 ) $BaseUrl = $BaseUrl.TrimEnd('/') $headers = @{ Authorization = "X-API-KEY $ApiKey" "Content-Type" = "application/json" } $terminalStatuses = @("Finished", "Failed", "Stopped") $reportsDir = Join-Path (Get-Location).Path "reports" if (-not (Test-Path $reportsDir)) { New-Item -ItemType Directory -Path $reportsDir -Force | Out-Null } function Save-FileFromUrl { param( [string]$Url, [string]$Path ) if (-not $Url) { return } Invoke-RestMethod -Uri $Url -Headers $headers -Method Get -OutFile $Path } Write-Host "Polling Leapwork Performance run $RunId ..." Start-Sleep -Seconds 10 $startTime = Get-Date $status = $null $statusResponse = $null while ($true) { $elapsed = [int]((Get-Date) - $startTime).TotalSeconds if ($elapsed -ge $ExpectedRunTime) { Write-Warning "Polling timeout reached after $ExpectedRunTime seconds." break } $statusResponse = Invoke-RestMethod -Uri $PollResultUrl -Headers $headers -Method Get $status = $statusResponse.status Write-Host "[$elapsed s] Status: $status" if ($terminalStatuses -contains $status) { break } Start-Sleep -Seconds 5 } if (-not ($terminalStatuses -contains $status)) { Write-Host "Stopping run because it did not reach a terminal status in time..." Invoke-RestMethod -Uri "$BaseUrl/api/integration/stopIntegration?runId=$RunId" -Headers $headers -Method Get | Out-Null Start-Sleep -Seconds 2 $statusResponse = Invoke-RestMethod -Uri $PollResultUrl -Headers $headers -Method Get $status = $statusResponse.status } Write-Host "Final status: $status" Write-Host ($statusResponse | ConvertTo-Json -Depth 10) $dateStamp = Get-Date -Format "yyyyMMdd" $excelPath = Join-Path $reportsDir "RunMetadata_${dateStamp}_${RunId}.xlsx" $analysisPath = Join-Path $reportsDir "RunMetadata_${dateStamp}_${RunId}.txt" Save-FileFromUrl -Url $statusResponse.excelReportUrl -Path $excelPath Save-FileFromUrl -Url $statusResponse.aiAnalysisReportUrl -Path $analysisPath if ($status -ne "Finished") { throw "Integration run did not finish successfully. Final status: $status" }