Azure 资源组中的并行处理
Parallel Processing in Azure Resource Group
举个例子,我在一个资源组中有 3 个虚拟机。
我想并行启动这些虚拟机。
比方说,1 个 VM 需要 3 分钟才能启动,因此 3 个 VM 需要 9 分钟。现在我希望这些虚拟机并行启动,以便在大约 3 分钟内启动所有 3 个虚拟机。
经过多次研发,我没有找到任何解决方案。
谢谢。
您可以使用 Start-Job
和 Wait-Job
来实现它。这是为您准备的 PowerShell 脚本。
$cred = Get-Credential
$VMs = @(@{"Name"="vm1";"ServiceName"="srv1"};@{"Name"="vm2";"ServiceName"="srv2"};@{"Name"="vm3";"ServiceName"="srv3"})
$jobs = @()
foreach ($vm in $VMs)
{
$params = @($vm.Name, $vm.ServiceName, $cred)
$job = Start-Job -ScriptBlock {
param($Name, $ServiceName, $cred)
try{
$acct = Get-AzureRmSubscription
}
catch{
Login-AzureRmAccount -Credential $cred
}
start-AzureVM -Name $Name -ServiceName $ServiceName
} -ArgumentList $params
$jobs = $jobs + $job
}
Wait-Job -Job $jobs
Get-Job | Receive-Job
以上代码适用于经典部署的 VM。如果你使用的是ARM部署,可以使用下面的脚本代替。
$cred = Get-Credential
$VMs = @(@{"Name"="vm1";"ResourceGroupName"="rg1"};@{"Name"="vm2";"ResourceGroupName"="rg2"};@{"Name"="vm3";"ResourceGroupName"="rg3"})
$jobs = @()
foreach ($vm in $VMs)
{
$params = @($vm.Name, $vm.ResourceGroupName, $cred)
$job = Start-Job -ScriptBlock {
param($Name, $ResourceGroupName, $cred)
try{
$acct = Get-AzureRmSubscription
}
catch{
Login-AzureRmAccount -Credential $cred
}
start-AzureRmVM -Name $Name -ResourceGroupName $ResourceGroupName
} -ArgumentList $params
$jobs = $jobs + $job
}
Wait-Job -Job $jobs
Get-Job | Receive-Job
举个例子,我在一个资源组中有 3 个虚拟机。
我想并行启动这些虚拟机。
比方说,1 个 VM 需要 3 分钟才能启动,因此 3 个 VM 需要 9 分钟。现在我希望这些虚拟机并行启动,以便在大约 3 分钟内启动所有 3 个虚拟机。
经过多次研发,我没有找到任何解决方案。
谢谢。
您可以使用 Start-Job
和 Wait-Job
来实现它。这是为您准备的 PowerShell 脚本。
$cred = Get-Credential
$VMs = @(@{"Name"="vm1";"ServiceName"="srv1"};@{"Name"="vm2";"ServiceName"="srv2"};@{"Name"="vm3";"ServiceName"="srv3"})
$jobs = @()
foreach ($vm in $VMs)
{
$params = @($vm.Name, $vm.ServiceName, $cred)
$job = Start-Job -ScriptBlock {
param($Name, $ServiceName, $cred)
try{
$acct = Get-AzureRmSubscription
}
catch{
Login-AzureRmAccount -Credential $cred
}
start-AzureVM -Name $Name -ServiceName $ServiceName
} -ArgumentList $params
$jobs = $jobs + $job
}
Wait-Job -Job $jobs
Get-Job | Receive-Job
以上代码适用于经典部署的 VM。如果你使用的是ARM部署,可以使用下面的脚本代替。
$cred = Get-Credential
$VMs = @(@{"Name"="vm1";"ResourceGroupName"="rg1"};@{"Name"="vm2";"ResourceGroupName"="rg2"};@{"Name"="vm3";"ResourceGroupName"="rg3"})
$jobs = @()
foreach ($vm in $VMs)
{
$params = @($vm.Name, $vm.ResourceGroupName, $cred)
$job = Start-Job -ScriptBlock {
param($Name, $ResourceGroupName, $cred)
try{
$acct = Get-AzureRmSubscription
}
catch{
Login-AzureRmAccount -Credential $cred
}
start-AzureRmVM -Name $Name -ResourceGroupName $ResourceGroupName
} -ArgumentList $params
$jobs = $jobs + $job
}
Wait-Job -Job $jobs
Get-Job | Receive-Job