首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowerShell并行接口数据检索

PowerShell并行接口数据检索
EN

Stack Overflow用户
提问于 2017-08-11 05:43:45
回答 1查看 670关注 0票数 0

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

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

这是可以通过jobs完成的事情吗?有没有其他方法可以让我并行运行?整个事情都需要重构吗?理想情况下,这将只在原生PowerShell代码中运行,而不必安装任何其他模块。

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

代码语言:javascript
复制
#Compose URL

#Create a New-Object system.Data.DataTable and configure it

#Make Invoke-RestMethod API call to get the collection of objects

Foreach($object in $Collection){
#Make API call for details about each object
#Add data to datatable
}

#Write datatable to database
EN

回答 1

Stack Overflow用户

发布于 2017-08-14 17:20:24

你为什么不使用jobs来解决这个问题呢?

代码语言:javascript
复制
# 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调用将并行进行。如果同时运行的作业数量很多,您可能希望控制这些作业的数量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45623886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档