我尝试创建PowerShell脚本以从Rest API检索JSON数据。此脚本将作为SQL Server代理作业运行,并将最终数据表与收集到数据库中的所有内容一起插入。
我已经探索了Foreach循环的-Parallel选项,将其添加到工作流程中,但在尝试将数据写入数据表时被阻止,因为它似乎与简单对象的处理方式不同。
这可以通过工作完成吗?还有另一种方法可以并行运行吗?整件事需要重组吗?理想情况下,这只能在本机PowerShell代码中运行,而无需安装任何其他模块。
我今天的代码的基本结构是:
"$fooA"
答案 0 :(得分:0)
为什么不为此使用工作?
# define script block with api call
$JobSb = {
param($obid)
# make api call
write-output = [PsCustomObject]@{
Obid = $obid
ApiResult = 0;
}
}
# start jobs for all objects
Foreach ($object in $Collection) {
Start-Job -ScriptBlock $JobSB -ArgumentList $object.Id -Name $object.name
}
# wait for jobs to finish
while (get-job) {
Get-Job | Where-Object State -NE 'Running' | ForEach-Object {
if ($_.State -ne 'Completed') {
Write-Warning ('Job [{0}] [{1}] ended with state [{2}].' -f $_.id,$_.Name,$_.State)
} else {
$JobResults = @(Receive-Job $_)
}
# write results to datatable
remove-job $_
}
start-sleep -Seconds 1
}
Api通话将并行进行。如果有很多作业,您可能希望同时控制同时运行的作业数。