1

我正在尝试开发一个脚本来将数据磁盘创建从快照附加到另一个 Azure VM

  1. 从源 VM 创建现有数据磁盘的 SNAPSHOTS
  2. 从步骤 1 中创建的 SNAPSHOTS 创建新的 DATADISKS
  3. 将新的 DATADISKS 附加到目标 VM

但是在尝试附加磁盘时我不断收到错误消息(第 3 步)。

Get-AzDisk:找不到资源组“RG-Test”下的资源“Microsoft.Compute/disks/disk_name2”。
错误代码:资源未找到
错误消息:未找到资源组“RG-Test”下的资源“Microsoft.Compute/disks/disk_name2”。
错误目标:
状态码:404
原因短语:未找到
操作ID:67319e0f-3f8f-416a-bb25-9d0547e661a4
Au caractère Ligne:22 : 13
+ $disk = Get-AzDisk -ResourceGroupName $resourceGroupName -DiskNam ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~
    + CategoryInfo : CloseError : (:) [Get-AzDisk], ComputeCloudException
    + FullyQualifiedErrorId:Microsoft.Azure.Commands.Compute.Automation.GetAzureRmDisk

Add-AzVMDataDisk : Impossible de valider l'argument sur le paramètre « ManagedDiskId »。L'argument est Null ou vide。Indiquez un argument qui n'est pas Null ou vide et réessayez。
Au caractère Ligne:24 : 110
+ ...nation_vm_object -CreateOption 附加 -ManagedDiskId $disk.Id -Lun $l ...
+ ~~~~~~~~
    + CategoryInfo : InvalidData : (:) [Add-AzVMDataDisk],ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Azure.Commands.Compute.AddAzureVMDataDiskCommand

编码 :


## 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

}

有人可以帮我解决这个错误吗?

4

1 回答 1

1

正如所评论的,错误消息显示您刚刚在此处的代码中输入了错字:

$disk = Get-AzDisk -ResourceGroupName $resourceGroupName -DiskName disk_name$i

在第二个循环中,您$disk_name通过在最后连接 loopcounter来定义一个变量$i。那个代码很好。

但是,在循环内部,您尝试再次将此循环计数器添加到名称中,但同时使用前面disk_name没有符号。$如果没有美元符号,则将名称视为文字字符串。

要使其正常工作,您所要做的就是将上述代码行更改为:

$disk = Get-AzDisk -ResourceGroupName $resourceGroupName -DiskName $disk_name
于 2020-01-13T10:55:58.603 回答