我已经挣扎了几天了,现在正在用-Scriptblock运行Start Job。
$sb = {Get-Date}
Start-Job -ScriptBlock $sb
现在,我有一个脚本,它通过65+API调用对8种不同的状态进行报告。总的来说,它需要500多个API调用,并且需要20分钟才能完成(每个API调用需要2-5秒,x500),所以我希望并行运行每个foreach块。
脚本作为脚本工作得很好,但不能作为开始作业。
当我运行作业时,它会立即“完成”,并且有更多的数据是False(因此我看不到任何错误消息):
67 Job67 BackgroundJob Completed False localhost foreach ($item....
我的示例代码如下所示:
$sb = {# Get count of Status1
foreach ($item in $Global:GetItems) {
$item1 = $item.id
If ($null -eq $TokenExpiresIn) { .\Get-Token.ps1 }
$Global:TokenExpiresIn = New-TimeSpan -Start $TokenExpiresNow -End $Script:TokenExpiresTime
$Method = "GET"
$Fromitems = $item1
$Status = "foo"
$Limit = "1"
$Fields = "blah"
$URL = "https://$APIServer/apis/v1.1/status?customerId=1&itemId=$Fromitems&status=$Status&fields=$Fields&limit=$Limit"
$Header = @{"Accept" = "*/*"; "Authorization" = "Bearer $SessionToken" }
$itemStatsResponse = Invoke-WebRequest -Method $Method -Uri $URL -Header $Header
$itemStatsJSON = ConvertFrom-Json -InputObject $itemStatsResponse
$itemCount = $itemStatsJSON.metadata.count
$Global:GetItems | Where-Object -Property id -EQ $item1 | Add-Member -MemberType NoteProperty "foo" -Value $itemCount
}
}
我按如下方式运行脚本块:
Start-Job -Name "foo" -ScriptBlock $sb
我正在使用PowerShell 7.1。脚本作为一个整体成功地运行了所有500多个API调用,但是它有点慢,所以我也在研究如何“多线程”我的API调用以获得更好的性能。
提前感谢您的支持/投入。StackOverflow上与PowerShell和Scriptblocks相关的其他帖子到目前为止还没有帮助我。