使用 Powershell 将 Azure 资源移动到另一个订阅

Move Azure resources to another subscription using Powershell

我正在尝试将一个资源组(包含一个 VM 及其依赖资源,例如网络接口等)移动到一个新的订阅和资源组。 (如果通过 GUI 完成,移动效果很好)

我的脚本:

foreach ($resource in $resources) {Move-AzureRmResource
-DestinationResourceGroupName "newresourcegroup" -ResourceId $resource.resourceID -DestinationSubscriptionId 123456}

失败

Move-AzureRmResource : {"error":{"code":"ResourceMoveProviderValidationFailed","message":"Resource move validation failed. Please see details. Diagnostic information: timestamp

等...

"The move resources request does not contain all the dependent resources. Please check error details for missing resource ids.\"}],\"code\":\"MissingMoveDependentResources\",\"message\":\"The move resources request does not contain all the dependent resources. Please check error details for missing resource ids.\"}}"},{"target":"Microsoft.Network/networkInterfaces","message":"{\"error\":{\"code\":\"MissingMoveDependentResources\",\"message\":\"The move resources request does not contain all the dependent resources. Please check details for missing resource Ids

显然我需要以某种方式指定依赖资源,但 Move-AzureRmResource 模块似乎没有 "dependant resources" 的参数。

一个。如何确定依赖的资源是什么?

b。如何在移动 cmdlet 中指定它们?

The move resources request does not contain all the dependent resources

根据您的脚本,您似乎只是遍历资源并将它们一个一个地移动到新订阅中的另一个资源组。但是我们知道,有些资源可能会有一些依赖资源,要移动这种类型的资源(例如虚拟机等),我们应该确保我们也移动了所有的依赖资源,否则,移动操作将失败。

在移动服务之前,我们需要知道what services that enable move and limitations. Besides, please refer to Use Powershell to move a VM知道如何移动需要依赖资源的资源。

我要补充一点,移动到新订阅需要同时移动相关资源。这需要在移动操作成功之前首先在同一个 RG 中组织资源(无论如何此时)。如果您只是在 RG 之间移动资源,那么您可以在不重组 RG 的情况下进行移动。请记住,您可能拥有 VM 扩展,这些扩展是可能会失败的隐藏对象,以及需要在移动前后解决的 Azure 备份等问题。

  1. 答案:这是一个 REST 验证,可以在尝试移动之前执行它来识别相关资源。 https://docs.microsoft.com/en-us/rest/api/resources/resources/validatemoveresources
  2. 然后您可以使用“$Ids = Get-AzureRMResource -ResourceGroupName $sourceRgName.ResourceGroupName | Select-Object ResourceId”获取资源 ID,然后使用“Move-AzureRmResource -DestinationResourceGroupName $targetRg.ResourceGroupName -DestinationSubscriptionId $AzureTargetSubscription.SubscriptionId -ResourceId $Ids.ResourceID"