PowerShell并行API数据检索

时间:2017-08-10 21:43:45

标签: sql-server powershell parallel-processing

我尝试创建PowerShell脚本以从Rest API检索JSON数据。此脚本将作为SQL Server代理作业运行,并将最终数据表与收集到数据库中的所有内容一起插入。

我已经探索了Foreach循环的-Parallel选项,将其添加到工作流程中,但在尝试将数据写入数据表时被​​阻止,因为它似乎与简单对象的处理方式不同。

这可以通过工作完成吗?还有另一种方法可以并行运行吗?整件事需要重组吗?理想情况下,这只能在本机PowerShell代码中运行,而无需安装任何其他模块。

我今天的代码的基本结构是:

"$fooA"

1 个答案:

答案 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通话将并行进行。如果有很多作业,您可能希望同时控制同时运行的作业数。