我有这个脚本,它创建了虚拟机,并通过dsc安装了谷歌chrome。我创建了当前存储帐户,并执行了脚本。但在下一次我有错误。这是我的脚本:
$SubscriptionName = "subscription_name"
Select-AzureSubscription -SubscriptionName $SubscriptionName
#Replace the variable values as needed
$VMName = "CSETest"
$StorageAccount = 'googleChrome'
$StorageKey = 'key'
$StorageContainer = 'dscarchives'
$ServiceName="ChromeInstaller"
#Get the OS image reference
$arrayWindows=( Get-AzureVMImage | where-object { $_.ImageName -like "*Windows*Server*2012*R2*en.us*" } )
$locationAllow=$arrayWindows[$arrayWindows.Count-1].Location
$locationAllow=$locationAllow.Split(";")
$locationAllow=$locationAllow | where-object { $_ -like "* US*"}
$Localization=(Get-Random -InputObject $locationAllow)
#Create VM Config with last windows update
$vmConfig = New-AzureVMConfig -Name $VMName -ImageName $arrayWindows[$arrayWindows.Count-1].ImageName -InstanceSize Small
#Create Provisioning Configuration
$vmProvisioningConfig = Add-AzureProvisioningConfig -VM $vmConfig -Windows -AdminUsername "login" -Password "password"
$StorageContext = New-AzureStorageContext -StorageAccountName $StorageAccount -StorageAccountKey $StorageKey
Publish-AzureVMDscConfiguration -ConfigurationPath .ChromeInstaller.ps1 -ContainerName $StorageContainer -StorageContext $StorageContext -Force
#Set the Azure VM DSC Extension to run the LCM meta-configuration
$vmAzureExtension = Set-AzureVMDscExtension -VM $vmProvisioningConfig -ConfigurationArchive ChromeInstaller.ps1.zip -ConfigurationName OpenChrome -Verbose -StorageContext $StorageContext -ContainerName $StorageContainer -Force
#Create a VM
New-AzureVM -ServiceName $ServiceName -VMs $vmAzureExtension -Location $Localization -WaitForBoot
在最后一行中,脚本抛出异常:
New AzureVM:BadRequest:源映像所在的存储帐户的位置或关联组Central USa99494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-R2-20110.01-en.us-127GB.vhd所在的位置或关联组与指定的云服务。源映像必须位于与云具有相同关联组或位置的存储帐户中服务美国西部。
所以,正如您所看到的,我的脚本生成随机位置。我无法在现场与链接。那么,我该如何修复这个bug呢?
源映像VHD必须与新虚拟机位于同一位置。使用AzCopy将映像复制到$locationAllow
中列出的所有位置的存储帐户中。
简单的答案是在与存储帐户相同的位置创建VM。这是在告诉你,你的云服务位置中不存在存储帐户位置中的Azure OS映像。
你也可以试试这个
$AzureLocation = (get-azurelocation)
$Localization=(Get-Random -InputObject $AzureLocation)
$WindowsImage=( Get-AzureVMImage | where-object { $_.ImageName -like "*Windows*Server*2012*R2*en.us*" -and $_.Location -Match $Localization.DisplayName } | sort PublishedDate | select -first 1 ).ImageName
#Create VM Config with last windows update
$vmConfig = New-AzureVMConfig -Name $VMName -ImageName $WindowsImage -InstanceSize Small
使用这种方法,我们选择一个位置,然后选择位于该位置内的图像。以前您选择的是一个图像(可能位于美国西部的位置),然后选择一个位置。
或者,获取存储帐户的位置,并使用该位置获取图像,并在存储帐户的同一位置创建云服务