/// <summary> /// Executes the cmdlet /// </summary> private void RunCmdlet() { var resourceIdsToUse = this.resourceIds .Concat(this.ResourceId) .DistinctArray(StringComparer.InvariantCultureIgnoreCase); this.DestinationSubscriptionId = this.DestinationSubscriptionId ?? DefaultContext.Subscription.Id; var sourceResourceGroups = resourceIdsToUse .Select(resourceId => ResourceIdUtility.GetResourceGroupId(resourceId)) .Where(resourceGroupId => !string.IsNullOrWhiteSpace(resourceGroupId)) .DistinctArray(StringComparer.InvariantCultureIgnoreCase); var count = sourceResourceGroups.Count(); if (count == 0) { throw new InvalidOperationException("At least one valid resource Id must be provided."); } else if (count > 1) { throw new InvalidOperationException( string.Format("The resources being moved must all reside in the same resource group. The resources: {0}", resourceIdsToUse.ConcatStrings(", "))); } var sourceResourceGroup = sourceResourceGroups.Single(); var destinationResourceGroup = ResourceIdUtility.GetResourceId( subscriptionId: this.DestinationSubscriptionId, resourceGroupName: this.DestinationResourceGroupName, resourceName: null, resourceType: null); this.ConfirmAction( this.Force, string.Format( "Are you sure you want to move these resources to the resource group '{0}' the resources: {1}", destinationResourceGroup, Environment.NewLine.AsArray().Concat(resourceIdsToUse).ConcatStrings(Environment.NewLine)), "Moving the resources.", destinationResourceGroup, () => { var apiVersion = this .DetermineApiVersion( providerNamespace: Constants.MicrosoftResourceNamesapce, resourceType: Constants.ResourceGroups) .Result; var parameters = new ResourceBatchMoveParameters { Resources = resourceIdsToUse, TargetResourceGroup = destinationResourceGroup, }; var operationResult = this.GetResourcesClient() .InvokeActionOnResource <JObject>( resourceId: sourceResourceGroup, action: Constants.MoveResources, apiVersion: apiVersion, parameters: parameters.ToJToken(), cancellationToken: this.CancellationToken.Value) .Result; var managementUri = this.GetResourcesClient() .GetResourceManagementRequestUri( resourceId: destinationResourceGroup, apiVersion: apiVersion, action: Constants.MoveResources); var activity = string.Format("POST {0}", managementUri.PathAndQuery); var result = this .GetLongRunningOperationTracker( activityName: activity, isResourceCreateOrUpdate: false) .WaitOnOperation(operationResult: operationResult); this.TryConvertAndWriteObject(result); }); }