我得到 endpoints 列表作为我的脚本的参数,我想向所有人发送http请求,但我不能在那里访问我的 args
.
$errors = @()
workflow a {
foreach -Parallel ($endpoint in $args) {
$HTTP_Request = [System.Net.WebRequest]::Create($endpoint)
try {
$HTTP_Response = $HTTP_Request.GetResponse()
$HTTP_Status = [int]$HTTP_Response.StatusCode
if ($HTTP_Status -eq 200) {
Write-Host "OK"
}
} catch {
$errors += $endpoint + ": " + $_.Exception.Message
}
}
}
Question: 如何以并行方式发送此HTTP请求?
1 回答
foreach -parallel
是PowerShell Workflow构造 . 不要将工作流与常规PowerShell混淆,因为它们使用的工作方式不同subtly differently .但首先,您需要实际调用工作流程 . 您发布的代码只是在没有调用它的情况下定义它 . 接下来,由于上述差异,您的代码存在一些问题:
自动变量
$args
在工作流程中不可用 . 相反,您必须定义工作流程应接受的参数 .Write-Host
cmdlet在工作流程中不可用 . 而是使用Write-Verbose
或Write-Debug
进行状态输出 .您无法在工作流程内更新工作流程外定义的变量 . 而是在变量中收集工作流的输出 .