一定間隔で HTTP リクエストを投げるサンプル。非同期で投げるので、レスポンスによらず一定間隔で投げ続ける。 大量のバースト的なリクエストには向いてない。 各リクエストの結果とレスポンスタイムは最後にまとめて出力するが、途中で実行中断すると出ないので、リクエスト回数とリクエスト間隔の設定には注意する。
通常の PowerShell でも実行できるが、PowerShell ISE の使用を推奨。
$maxCount = 10 $waitSeconds = 2 for ($i = 1; $i -le $maxCount; $i++){ Write-Output($i.ToString() + "/" + $maxCount.ToString()) Start-Job -ScriptBlock{ param( [string] $param ) $startTime = [DateTime]::Now Write-Output("(" + $param + ") " + $startTime.ToString("[MM/dd HH:mm:ss]") + " requesting...") $url = "https://example.com/Function1?param=" + $param Invoke-RestMethod -Method Get -Uri $url $endTime = [DateTime]::Now $duration = $endTime - $startTime Write-Output("(" + $param + ") " + $endTime.ToString("[MM/dd HH:mm:ss]") + " response time: " + $duration.TotalSeconds.ToString("N2") + " (s)") } -ArgumentList $i Start-Sleep $waitSeconds } While ($runningJobs = Get-Job -State "Running"){ Write-Output("Still running... (" + $runningJobs.ChildJobs.Count + " jobs)") Start-Sleep 5 } Write-Output "`r`nAll request completed.`r`n" foreach ($job in Get-Job){ Receive-Job -Job $job Remove-Job -Job $job Write-Output "" }
実行結果例