PowerShell脚本将数据磁盘从一个azure vm移动到另一个vm

PowerShell脚本将数据磁盘从一个azure vm移动到另一个vm,azure,azure-virtual-machine,azure-powershell,Azure,Azure Virtual Machine,Azure Powershell,我正在开发一个脚本,将数据磁盘从一个Azure VM复制到另一个Azure VM。任务如下: 从源VM创建现有数据磁盘的快照 从步骤1创建的快照创建新的数据磁盘 将新数据磁盘连接到目标VM 我已经写了完整的代码。但是,步骤3抛出了一个错误 ## Create Snapshot from a Managed Disk ## $resourceGroupName = 'manju_copy_disk' $location = 'east us 2' $source_vm_name = 'ser

我正在开发一个脚本,将数据磁盘从一个Azure VM复制到另一个Azure VM。任务如下:

从源VM创建现有数据磁盘的快照 从步骤1创建的快照创建新的数据磁盘 将新数据磁盘连接到目标VM 我已经写了完整的代码。但是,步骤3抛出了一个错误

## Create Snapshot from a Managed Disk ##

$resourceGroupName = 'manju_copy_disk' 
$location = 'east us 2' 
$source_vm_name = 'server1'
$destination_vm_name = 'server3'

$source_vm_object = get-azurermvm -ResourceGroupName $resourceGroupName -Name $source_vm_name

$data_disk_list = Get-AzureRmDisk | 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-AzureRmSnapshotConfig -SourceUri $data_disk_list_iterator.id -Location $location -CreateOption copy

    $snapshot_object = New-AzureRmSnapshot -Snapshot $snapshot_config -SnapshotName $snapshotName -ResourceGroupName $resourceGroupName

    $snapshot_list.Add($snapshot_object.Id)

}


## Create Managed disk from snap shot created above ##
$storageType = 'StandardLRS'


$count=0

$destination_datadisk_list = New-Object System.Collections.ArrayList($null)
#$destination_datadisk_Name_list = New-Object System.Collections.ArrayList($null)

foreach($snapshot_list_iterator in $snapshot_list){


    $disk_name = $destination_vm_name + "_datadisk_" + $count
    $count += 1

    $diskConfig = New-AzureRmDiskConfig -AccountType $storageType -Location $location -CreateOption Copy -SourceResourceId $snapshot_list_iterator

    $datadisk_object = New-AzureRmDisk -Disk $diskConfig -ResourceGroupName $resourceGroupName -DiskName $disk_name

    $destination_datadisk_ID_list.Add($datadisk_object.Id)

}



## Attach Managed disk to destination vm

$destination_vm_object = Get-AzureRmVM -Name $destination_vm_name -ResourceGroupName $resourceGroupName 

$lun_count = 1

foreach($destination_datadisk_list_iterator in $destination_datadisk_list){
    $destination_datadisk_name = $destination_vm_name + "_datadisk_"+$lun_count
    $destination_vm_object = Add-AzureRmVMDataDisk -VM $destination_vm_object -Name $destination_datadisk_name -CreateOption Attach -ManagedDiskId $destination_datadisk_list_iterator -Lun $lun_count
    $lun_count += 1
}

Update-AzureRmVM -VM $destination_vm_object -ResourceGroupName $resourceGroupName  ## --> LINE CODE NOT WORKING
以下是错误:

Update-AzureRmVM : Changing property 'dataDisk.name' is not allowed.
ErrorCode: PropertyChangeNotAllowed
ErrorMessage: Changing property 'dataDisk.name' is not allowed.
StatusCode: 409
ReasonPhrase: Conflict
OperationID : e8a0a8de-0cdd-4ba0-90bc-883d37e374af
At line:1 char:1
+ Update-AzureRmVM -VM $destination_vm_object -ResourceGroupName $resou ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Update-AzureRmVM], ComputeCloudException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.Compute.UpdateAzureVMCommand

连接从快照创建的数据磁盘时,不能再次更改名称。看一看


因此,我建议您可以从快照创建数据磁盘,并在相同的foreach循环中使用相同的名称将它们附加到目标VM。

您不能更改磁盘名称。也许可以参考这些链接。我从Add-AzureRmVMDataDisk cmdlet中删除了-name参数,它成功了。此外,我按照您的建议移动了代码,将磁盘连接到for循环下。谢谢