2

我正在尝试为一项大型工作生成 1000 个 Azure VM(是的,我知道成本)。这是在 PowerShell 脚本(参见下面的脚本)中异步完成的,因此在等待所有 VM 启动时不会产生费用。

在脚本中 ifWait-JobReceive-Jobinclude 当脚本运行时创建了所有请求的 VM,但如果Wait-JobReceive-Job注释掉了所有 VM,则不会创建所有 VM。创建什么虚拟​​机似乎是随机的。

谁能看到我对这个脚本做错了什么?

$VMCount = 5
$Location = 'East US'
$Image = 'MyImage'
$AdminPassword = 'XXXXXXXXXX'
$LinuxUser = 'MyUser'
$InstanceSize = 'ExtraSmall' #extra small only for testing

$CloudServiceName = 'NewAzureMachinePrefix' #this is changed each time to something unique

for ($i = 1; $i -le $VMCount; $i++)
{
$jobId = Start-Job -ArgumentList $CloudServiceName$i, $Location, $Image, $AdminPassword, $LinuxUser, $InstanceSize -ScriptBlock {
    param($ServiceName, $Loc, $Img, $Password, $User, $Size) 
    New-AzureVMConfig -Name $ServiceName -InstanceSize $Size -ImageName $Img | 
    Add-AzureProvisioningConfig -Linux -LinuxUser $User -Password $Password | 
    Add-AzureDataDisk -CreateNew -DiskSizeInGB 50 -DiskLabel $ServiceName -LUN 0 | 
    Remove-AzureEndpoint 'SSH' | 
    Add-AzureEndpoint -Protocol tcp -PublicPort 22 -LocalPort 22 -Name 'SSH' | 
    Set-AzureSubnet 'MySubnet' | 
    New-AzureVM -ServiceName $ServiceName -AffinityGroup 'MyGroup' -VNetName 'MyNet'
}

Write-Output $CloudServiceName$i
Wait-Job $jobId
Receive-Job $jobId
}
4

2 回答 2

2

在我们的 Microsoft 代表发来几封电子邮件后,我弄清楚了发生了什么。在使用 Affinity Group 和/或虚拟网络在 Azure 中创建新虚拟机时,会创建独占锁。此排他锁不允许多个请求访问关联组和/或虚拟网络。

于 2013-05-20T16:12:42.660 回答
1

您是否尝试过将等待作业移到 for 循环之外?我猜你知道把它放在那里你让它同步运行。

以下将等待所有作业:

Get-Job | Wait-Job
Get-Job | Receive-Job

Receive-Job 应该为您提供一些关于为什么没有创建某些内容的线索。

于 2013-05-04T07:05:40.490 回答