首页 > 解决方案 > Powershell 并行或多线程作业

问题描述

我有以下脚本:

   ForEach ($lista in $listas) {                      
  $RG = $lista.rg
  $VM = $lista.vm
  $NIC = $lista.nic                     
  
  Stop-AzVM -ResourceGroupName $RG -Name $VM -Force

  $nic = Get-AzNetworkInterface -ResourceGroupName $RG -Name $NIC
  $nic.EnableAcceleratedNetworking = $false
  $nic | Set-AzNetworkInterface

  Start-AzVM -ResourceGroupName $RG -Name $VM

  }

我可以在 azure vm 加速网络上禁用它。它工作正常,但我想知道是否可以并行化它,因为我必须在 20-30 vm 上进行。

有可能这样做吗?

谢谢

标签: azurepowershell

解决方案


试试这个,我没有测试过,但它应该可以工作。

$ScriptBlock = {
    param($RG,$VM,$NIC) 
                   
  
  Stop-AzVM -ResourceGroupName $RG -Name $VM -Force

  $nic = Get-AzNetworkInterface -ResourceGroupName $RG -Name $NIC
  $nic.EnableAcceleratedNetworking = $false
  $nic | Set-AzNetworkInterface

  Start-AzVM -ResourceGroupName $RG -Name $VM


}

foreach($lista in $listas) {
    # Execute the jobs in parallel
    Start-Job $ScriptBlock -ArgumentList $lista.rg, $lista.vm, $lista.nic
  
}

# Wait for all to complete
While (Get-Job -State "Running") { Start-Sleep 5 }

# Display output from all jobs
$res += (Get-Job | Receive-Job)

# Cleanup
Remove-Job *

推荐阅读