【发布时间】:2020-04-29 08:59:03
【问题描述】:
我正在尝试开发一个脚本来将数据磁盘从快照创建附加到另一个 Azure VM
- 从源 VM 创建现有数据磁盘的 SNAPSHOTS
- 从步骤 1 中创建的 SNAPSHOTS 创建新的 DATADISKS
- 将新的 DATADISKS 附加到目标 VM
但是,我在尝试附加磁盘时不断出错(第 3 步)。
代码:
## Create Snapshot from a Managed Disk ##
$resourceGroupName = 'RG-Test'
$location = 'east us 2'
$source_vm_name = 'VMS'
$destination_vm_name = 'VMD'
$data_disk_list = Get-azDisk | where {$_.ManagedBy -match $source_vm_name -and $_.OsType -eq $null}
$snapshot_list = New-Object System.Collections.ArrayList($null)
foreach($data_disk_list_iterator in $data_disk_list){
$snapshotName = $destination_vm_name + "_Snapshot_" + $data_disk_list_iterator.Name
$snapshot_config = New-AzSnapshotConfig -SourceUri $data_disk_list_iterator.id -Location $location -CreateOption copy
$snapshot_object = New-AzSnapshot -Snapshot $snapshot_config -SnapshotName $snapshotName -ResourceGroupName $resourceGroupName
$snapshot_list.Add($snapshot_object.Id)
}
## Create Managed Data Disk from snapshot created above ##
$i=0
$destination_datadisk_list = New-Object System.Collections.ArrayList($null)
$destination_vm_object = Get-AzVM -Name $destination_vm_name -ResourceGroupName $resourceGroupName
$lun_count = 1
foreach($snapshot_list_iterator in $snapshot_list){
$disk_name = $destination_vm_name + "_datadisk_" + $i
$i += 1
$diskConfig = New-AzDiskConfig -AccountType $storageType -Location $location -CreateOption Copy -SourceResourceId $snapshot_list_iterator
$datadisk_object = New-AzDisk -Disk $diskConfig -ResourceGroupName $resourceGroupName -DiskName $disk_name
$disk = Get-AzDisk -ResourceGroupName $resourceGroupName -DiskName disk_name$i
$destination_vm_object = Add-AzVMDataDisk -VM $destination_vm_object -CreateOption Attach -ManagedDiskId $disk.Id -Lun $lun_count
$lun_count += 1
Update-AzVM -VM $destination_vm_object -ResourceGroupName $resourceGroupName
}
有人可以帮我解决这个错误吗?
【问题讨论】:
-
第一次阅读时,错误在这里
$disk = Get-AzDisk -ResourceGroupName $resourceGroupName -DiskName disk_name$i。将其更改为$disk = Get-AzDisk -ResourceGroupName $resourceGroupName -DiskName $disk_name -
感谢@Theo 的回复,今晚我将测试修改。另一件事请这个变量是什么:$ data_disk_list_iterator
-
$data_disk_list_iterator是一个变量,每次运行循环时都包含集合$data_disk_list中的一项。 (通常人们称之为$i)。在循环中,这个变量代表一个Managed disk 对象。 -
感谢@Theo 的解释,这真的很有趣
-
@azure-power 你可以吗?如果可以,请您发表您的答案吗?
标签: azure powershell azure-virtual-machine azure-powershell azure-managed-disk