我正在尝试创建一个PowerShell脚本,用于从Rest API中检索JSON数据。此脚本将作为SQL Server代理作业运行,并将包含收集到数据库中的所有内容的最终数据表插入数据库。
我研究了Foreach循环的-Parallel选项,将其添加到工作流中,但在尝试将数据写入数据表时被阻塞,因为它的处理方式似乎与简单对象不同。
这是可以通过jobs完成的事情吗?有没有其他方法可以让我并行运行?整个事情都需要重构吗?理想情况下,这将只在原生PowerShell代码中运行,而不必安装任何其他模块。
今天我的代码的基本结构是:
#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发布于 2017-08-14 17:20:24
你为什么不使用jobs来解决这个问题呢?
# 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调用将并行进行。如果同时运行的作业数量很多,您可能希望控制这些作业的数量。
https://stackoverflow.com/questions/45623886
复制相似问题