我正在尝试运行Azure Powershell并行作业,以加快从Azure门户收集备份数据的速度。 每次并行运行不会加快Get-AzRecoveryServicesBackupJobDetails -JobId $ jobId属性的数据收集。它仍然看起来像是在单线程中运行。我想以多线程方式收集数据,就像收集所有备份作业ID一样。
Start-RSJob可以帮助我实现这一目标,但是我会随机丢失数据,因此这不是一种选择。
Param($sVault,$bVault,$bSizeData,$bDataArray)
foreach -parallel -ThrottleLimit 10 ($sData in $bSizeData) {
$Jobs=$sData.JobId
$workflow:bDataArray+=$Jobs
}
foreach -parallel ($jobId in $workflow:bDataArray) {
$(Get-AzRecoveryServicesBackupJobDetails -JobId $jobId).Properties
}
$ workflow:bDataArray + = $ Jobs快速且按预期完成。我能够很快从Azure接收所有备份作业ID。
$(Get-AzRecoveryServicesBackupJobDetails -JobId $ jobId)。Properties缓慢地打印出作业详细信息,就像它以单线程顺序运行一样。有什么方法可以提高代码第二部分的性能?
编辑:我已经将Get-AzRecoveryServicesBackupJobDetails部分移至另一个并行任务和分离的任务中。现在的问题似乎是数据已反序列化,并且无法以使Azure命令可以理解的方式传递数据。
foreach -parallel ($jobId in $workflow:bDataArray) {
Import-AzContext -Path .\azsession.json
Set-AzRecoveryServicesVaultContext -Vault $bVault
Get-AzRecoveryServicesBackupJobDetails -JobId $jobId
}
设置库上下文失败:
type "Microsoft.Azure.Commands.RecoveryServices.ARSVault". Error: "Cannot convert the "Microsoft.Azure.Commands.RecoveryServices.ARSVault" value of
type "Deserialized.Microsoft.Azure.Commands.RecoveryServices.ARSVault" to type "Microsoft.Azure.Commands.RecoveryServices.ARSVault"."
编辑:我想我开始对此感到困惑。我不能整体使用反序列化的对象,但是可以访问其属性。我将尝试与他们一起玩,看看进展如何。