public ASRRecoveryPlanGroup( RecoveryPlanGroup recoveryPlanGroup, IList <ReplicationProtectedItem> replicationProtectedItems = null) { if (recoveryPlanGroup != null) { this.GroupType = recoveryPlanGroup.GroupType.ToString(); //TODO this.StartGroupActions = recoveryPlanGroup.StartGroupActions; this.EndGroupActions = recoveryPlanGroup.EndGroupActions; if (replicationProtectedItems != null) { var replicationProtectedItemList = recoveryPlanGroup.ReplicationProtectedItems.Select( item => item.Id.ToLower()); this.ReplicationProtectedItems = replicationProtectedItems.Where( rpi => replicationProtectedItemList.Contains(rpi.Id.ToLower())) .ToList(); } else { this.ReplicationProtectedItems = new List <ReplicationProtectedItem>(); } } }
public ASRRecoveryPlanGroup( string groupName, RecoveryPlanGroup recoveryPlanGroup, IList <ReplicationProtectedItem> replicationProtectedItems = null) : this( recoveryPlanGroup, replicationProtectedItems) { this.Name = groupName; }
/// <summary> /// Creates Replication Plan Legacy. /// </summary> private void CreateRecoveryPlanLegacy() { CreateRecoveryPlanInputProperties createRecoveryPlanInputProperties = new CreateRecoveryPlanInputProperties() { FailoverDeploymentModel = failoverDeploymentModel, Groups = new List <RecoveryPlanGroup>(), PrimaryFabricId = this.primaryserver, RecoveryFabricId = this.recoveryserver }; RecoveryPlanGroup recoveryPlanGroup = new RecoveryPlanGroup() { GroupType = Constants.Boot, ReplicationProtectedItems = new List <RecoveryPlanProtectedItem>(), StartGroupActions = new List <RecoveryPlanAction>(), EndGroupActions = new List <RecoveryPlanAction>() }; foreach (ASRProtectionEntity pe in ProtectionEntityList) { string fabricName = Utilities.GetValueFromArmId(pe.ID, ARMResourceTypeConstants.ReplicationFabrics); // fetch the latest PE object ProtectableItemResponse protectableItemResponse = RecoveryServicesClient.GetAzureSiteRecoveryProtectableItem(fabricName, pe.ProtectionContainerId, pe.Name); ReplicationProtectedItemResponse replicationProtectedItemResponse = RecoveryServicesClient.GetAzureSiteRecoveryReplicationProtectedItem(fabricName, pe.ProtectionContainerId, Utilities.GetValueFromArmId(protectableItemResponse.ProtectableItem.Properties.ReplicationProtectedItemId, ARMResourceTypeConstants.ReplicationProtectedItems)); string VmId = null; if (replicationProtectedItemResponse.ReplicationProtectedItem.Properties.ProviderSpecificDetails.GetType() == typeof(HyperVReplicaAzureReplicationDetails)) { VmId = ((HyperVReplicaAzureReplicationDetails)replicationProtectedItemResponse.ReplicationProtectedItem.Properties.ProviderSpecificDetails).VmId; } else if (replicationProtectedItemResponse.ReplicationProtectedItem.Properties.ProviderSpecificDetails.GetType() == typeof(HyperVReplica2012ReplicationDetails)) { VmId = ((HyperVReplica2012ReplicationDetails)replicationProtectedItemResponse.ReplicationProtectedItem.Properties.ProviderSpecificDetails).VmId; } RecoveryPlanProtectedItem recoveryPlanProtectedItem = new RecoveryPlanProtectedItem(); recoveryPlanProtectedItem.Id = replicationProtectedItemResponse.ReplicationProtectedItem.Id; recoveryPlanProtectedItem.VirtualMachineId = VmId; recoveryPlanGroup.ReplicationProtectedItems.Add(recoveryPlanProtectedItem); } createRecoveryPlanInputProperties.Groups.Add(recoveryPlanGroup); CreateRecoveryPlanInput createRecoveryPlanInput = new CreateRecoveryPlanInput() { Properties = createRecoveryPlanInputProperties }; CreateRecoveryPlan(this.Name, createRecoveryPlanInput); }
/// <summary> /// Update Recovery Plan: By powerShell Recovery Plan object /// </summary> private void UpdateRecoveryPlan(ASRRecoveryPlan asrRecoveryPlan) { UpdateRecoveryPlanInputProperties updateRecoveryPlanInputProperties = new UpdateRecoveryPlanInputProperties() { Groups = new List <RecoveryPlanGroup>(), }; foreach (ASRRecoveryPlanGroup asrRecoveryPlanGroup in asrRecoveryPlan.Groups) { RecoveryPlanGroup recoveryPlanGroup = new RecoveryPlanGroup() { GroupType = asrRecoveryPlanGroup.GroupType, // Initialize ReplicationProtectedItems with empty List if asrRecoveryPlanGroup.ReplicationProtectedItems is null // otherwise assign respective values ReplicationProtectedItems = asrRecoveryPlanGroup.ReplicationProtectedItems == null ? new List <RecoveryPlanProtectedItem>() : asrRecoveryPlanGroup.ReplicationProtectedItems.Select(item => { var newItem = new RecoveryPlanProtectedItem(item.Id); string VmId = null; if (item.Properties.ProviderSpecificDetails.GetType() == typeof(HyperVReplicaAzureReplicationDetails)) { VmId = ((HyperVReplicaAzureReplicationDetails)item.Properties.ProviderSpecificDetails).VmId; } else if (item.Properties.ProviderSpecificDetails.GetType() == typeof(HyperVReplica2012ReplicationDetails)) { VmId = ((HyperVReplica2012ReplicationDetails)item.Properties.ProviderSpecificDetails).VmId; } newItem.VirtualMachineId = VmId; return(newItem); }).ToList(), StartGroupActions = asrRecoveryPlanGroup.StartGroupActions, EndGroupActions = asrRecoveryPlanGroup.EndGroupActions }; updateRecoveryPlanInputProperties.Groups.Add(recoveryPlanGroup); } UpdateRecoveryPlanInput updateRecoveryPlanInput = new UpdateRecoveryPlanInput() { Properties = updateRecoveryPlanInputProperties }; UpdateRecoveryPlan(asrRecoveryPlan.Name, updateRecoveryPlanInput); }
public ASRRecoveryPlanGroup( RecoveryPlanGroup recoveryPlanGroup, IList <ReplicationProtectedItem> replicationProtectedItems = null) { if (recoveryPlanGroup != null) { this.GroupType = recoveryPlanGroup.GroupType.ToString(); if (recoveryPlanGroup.StartGroupActions != null) { this.StartGroupActions = recoveryPlanGroup.StartGroupActions.ToList(). ConvertAll(startGroupAction => new ASRRecoveryPlanAction(startGroupAction)); } if (recoveryPlanGroup.EndGroupActions != null) { this.EndGroupActions = recoveryPlanGroup.EndGroupActions.ToList(). ConvertAll(endGroupActions => new ASRRecoveryPlanAction(endGroupActions)); } if (replicationProtectedItems != null) { var replicationProtectedItemList = recoveryPlanGroup.ReplicationProtectedItems.Select( item => item.Id.ToLower()); var replicationProtectedItemsTemp = replicationProtectedItems.Where( rpi => replicationProtectedItemList.Contains(rpi.Id.ToLower())) .ToList(); if (replicationProtectedItemsTemp != null) { this.ReplicationProtectedItems = replicationProtectedItemsTemp.ConvertAll( temp => new ASRReplicationProtectedItem(temp)); } } else { this.ReplicationProtectedItems = new List <ASRReplicationProtectedItem>(); } } }
/// <summary> /// Creates Replication Plan /// </summary> private void CreateRecoveryPlan() { var createRecoveryPlanInputProperties = new CreateRecoveryPlanInputProperties { FailoverDeploymentModel = (FailoverDeploymentModel)Enum.Parse( typeof(FailoverDeploymentModel), this.failoverDeploymentModel), Groups = new List <RecoveryPlanGroup>(), PrimaryFabricId = this.primaryserver, RecoveryFabricId = this.recoveryserver }; var recoveryPlanGroup = new RecoveryPlanGroup { GroupType = RecoveryPlanGroupType.Boot, ReplicationProtectedItems = new List <RecoveryPlanProtectedItem>(), StartGroupActions = new List <RecoveryPlanAction>(), EndGroupActions = new List <RecoveryPlanAction>() }; foreach (var rpi in this.ReplicationProtectedItem) { var fabricName = Utilities.GetValueFromArmId( rpi.ID, ARMResourceTypeConstants.ReplicationFabrics); var replicationProtectedItemResponse = this.RecoveryServicesClient .GetAzureSiteRecoveryReplicationProtectedItem( fabricName, Utilities.GetValueFromArmId( rpi.ID, ARMResourceTypeConstants.ReplicationProtectionContainers), rpi.Name); string VmId = null; if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails.GetType() == typeof(HyperVReplicaAzureReplicationDetails)) { VmId = ((HyperVReplicaAzureReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails).VmId; } else if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails .GetType() == typeof(HyperVReplicaReplicationDetails)) { VmId = ((HyperVReplicaReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails).VmId; } else if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails .GetType() == typeof(HyperVReplicaBlueReplicationDetails)) { VmId = ((HyperVReplicaBlueReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails).VmId; } else if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails .GetType() == typeof(InMageAzureV2ReplicationDetails)) { VmId = ((InMageAzureV2ReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails).VmId; } else if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails .GetType() == typeof(InMageReplicationDetails)) { VmId = ((InMageReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails).VmId; } else if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails.GetType() == typeof(A2AReplicationDetails)) { A2AReplicationDetails a2aReplicationDetails = ((A2AReplicationDetails)replicationProtectedItemResponse .Properties .ProviderSpecificDetails); if (a2aReplicationDetails.FabricObjectId.IndexOf( Constants.ClassicCompute, StringComparison.OrdinalIgnoreCase) >= 0) { createRecoveryPlanInputProperties.FailoverDeploymentModel = Management.RecoveryServices.SiteRecovery.Models.FailoverDeploymentModel.Classic; } else if (a2aReplicationDetails.FabricObjectId.IndexOf( Constants.Compute, StringComparison.OrdinalIgnoreCase) >= 0) { createRecoveryPlanInputProperties.FailoverDeploymentModel = Management.RecoveryServices.SiteRecovery.Models.FailoverDeploymentModel.ResourceManager; } } var recoveryPlanProtectedItem = new RecoveryPlanProtectedItem(); recoveryPlanProtectedItem.Id = replicationProtectedItemResponse.Id; recoveryPlanProtectedItem.VirtualMachineId = VmId; recoveryPlanGroup.ReplicationProtectedItems.Add(recoveryPlanProtectedItem); } createRecoveryPlanInputProperties.Groups.Add(recoveryPlanGroup); var createRecoveryPlanInput = new CreateRecoveryPlanInput { Properties = createRecoveryPlanInputProperties }; this.CreateRecoveryPlan( this.Name, createRecoveryPlanInput); }
/// <summary> /// Creates Replication Plan /// </summary> private void CreateRecoveryPlan() { var createRecoveryPlanInputProperties = new CreateRecoveryPlanInputProperties { FailoverDeploymentModel = this.failoverDeploymentModel, Groups = new List <RecoveryPlanGroup>(), PrimaryFabricId = this.primaryserver, RecoveryFabricId = this.recoveryserver }; var recoveryPlanGroup = new RecoveryPlanGroup { GroupType = RecoveryPlanGroupType.Boot, ReplicationProtectedItems = new List <RecoveryPlanProtectedItem>(), StartGroupActions = new List <RecoveryPlanAction>(), EndGroupActions = new List <RecoveryPlanAction>() }; foreach (var rpi in this.ReplicationProtectedItem) { var fabricName = Utilities.GetValueFromArmId( rpi.ID, ARMResourceTypeConstants.ReplicationFabrics); var replicationProtectedItemResponse = this.RecoveryServicesClient .GetAzureSiteRecoveryReplicationProtectedItem( fabricName, Utilities.GetValueFromArmId( rpi.ID, ARMResourceTypeConstants.ReplicationProtectionContainers), rpi.Name); string VmId = null; if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails.GetType() == typeof(HyperVReplicaAzureReplicationDetails)) { VmId = ((HyperVReplicaAzureReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails).VmId; } else if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails .GetType() == typeof(HyperVReplicaReplicationDetails)) { VmId = ((HyperVReplicaReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails).VmId; } else if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails .GetType() == typeof(HyperVReplicaBlueReplicationDetails)) { VmId = ((HyperVReplicaBlueReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails).VmId; } else if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails .GetType() == typeof(InMageAzureV2ReplicationDetails)) { VmId = ((InMageAzureV2ReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails).VmId; } else if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails .GetType() == typeof(InMageReplicationDetails)) { VmId = ((InMageReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails).VmId; } else if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails.GetType() == typeof(A2AReplicationDetails)) { A2AReplicationDetails a2aReplicationDetails = ((A2AReplicationDetails)replicationProtectedItemResponse .Properties .ProviderSpecificDetails); if (a2aReplicationDetails.FabricObjectId.IndexOf( Constants.ClassicCompute, StringComparison.OrdinalIgnoreCase) >= 0) { createRecoveryPlanInputProperties.FailoverDeploymentModel = Management.RecoveryServices.SiteRecovery.Models.FailoverDeploymentModel.Classic; } else if (a2aReplicationDetails.FabricObjectId.IndexOf( Constants.Compute, StringComparison.OrdinalIgnoreCase) >= 0) { createRecoveryPlanInputProperties.FailoverDeploymentModel = Management.RecoveryServices.SiteRecovery.Models.FailoverDeploymentModel.ResourceManager; } } else if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails .GetType() == typeof(InMageRcmReplicationDetails)) { VmId = ((InMageRcmReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails).InternalIdentifier; createRecoveryPlanInputProperties.FailoverDeploymentModel = Management.RecoveryServices.SiteRecovery.Models.FailoverDeploymentModel.ResourceManager; } else if (replicationProtectedItemResponse.Properties.ProviderSpecificDetails .GetType() == typeof(InMageRcmFailbackReplicationDetails)) { VmId = ((InMageRcmFailbackReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails).InternalIdentifier; createRecoveryPlanInputProperties.FailoverDeploymentModel = Management.RecoveryServices.SiteRecovery.Models.FailoverDeploymentModel.ResourceManager; } var recoveryPlanProtectedItem = new RecoveryPlanProtectedItem(); recoveryPlanProtectedItem.Id = replicationProtectedItemResponse.Id; recoveryPlanProtectedItem.VirtualMachineId = VmId; recoveryPlanGroup.ReplicationProtectedItems.Add(recoveryPlanProtectedItem); } createRecoveryPlanInputProperties.Groups.Add(recoveryPlanGroup); // Add zone to zone details. if (this.ParameterSetName == ASRParameterSets.AzureZoneToZone) { var recoveryPlanA2AInput = new RecoveryPlanA2AInput { PrimaryZone = this.PrimaryZone, RecoveryZone = this.RecoveryZone, PrimaryExtendedLocation = this.IsParameterBound(c => c.PrimaryEdgeZone) ? new ExtendedLocation { Name = this.PrimaryEdgeZone } : null, RecoveryExtendedLocation = this.IsParameterBound(c => c.RecoveryEdgeZone) ? new ExtendedLocation { Name = this.RecoveryEdgeZone } : null }; createRecoveryPlanInputProperties.ProviderSpecificInput = new List <RecoveryPlanProviderSpecificInput>(); createRecoveryPlanInputProperties.ProviderSpecificInput.Add(recoveryPlanA2AInput); } var createRecoveryPlanInput = new CreateRecoveryPlanInput { Properties = createRecoveryPlanInputProperties }; this.CreateRecoveryPlan( this.Name, createRecoveryPlanInput); }
/// <summary> /// ProcessRecord of the command. /// </summary> public override void ExecuteSiteRecoveryCmdlet() { base.ExecuteSiteRecoveryCmdlet(); if (this.ShouldProcess( this.InputObject.FriendlyName, VerbsData.Edit)) { ASRRecoveryPlanGroup tempGroup; switch (this.ParameterSetName) { case ASRParameterSets.AppendGroup: var recoveryPlanGroup = new RecoveryPlanGroup { GroupType = RecoveryPlanGroupType.Boot, ReplicationProtectedItems = new List <RecoveryPlanProtectedItem>(), StartGroupActions = new List <RecoveryPlanAction>(), EndGroupActions = new List <RecoveryPlanAction>() }; this.InputObject.Groups.Add( new ASRRecoveryPlanGroup( "Group " + (this.InputObject.Groups.Count - 1), recoveryPlanGroup)); break; case ASRParameterSets.RemoveGroup: tempGroup = this.InputObject.Groups.FirstOrDefault( g => string.Compare( g.Name, this.RemoveGroup.Name, StringComparison.OrdinalIgnoreCase) == 0); if (tempGroup != null) { this.InputObject.Groups.Remove(tempGroup); this.InputObject = this.InputObject.RefreshASRRecoveryPlanGroupNames(); } else { throw new PSArgumentException( string.Format( Resources.GroupNotFoundInRecoveryPlan, this.RemoveGroup.Name, this.InputObject.FriendlyName)); } break; case ASRParameterSets.AddReplicationProtectedItems: foreach (var rpi in this.AddProtectedItem) { var fabricName = Utilities.GetValueFromArmId( rpi.ID, ARMResourceTypeConstants.ReplicationFabrics); var replicationProtectedItemResponse = this.RecoveryServicesClient .GetAzureSiteRecoveryReplicationProtectedItem( fabricName, Utilities.GetValueFromArmId( rpi.ID, ARMResourceTypeConstants.ReplicationProtectionContainers), rpi.Name); tempGroup = this.InputObject.Groups.FirstOrDefault( g => string.Compare( g.Name, this.Group.Name, StringComparison.OrdinalIgnoreCase) == 0); if (tempGroup != null) { foreach (var gp in this.InputObject.Groups) { if (gp.ReplicationProtectedItems == null) { continue; } if (gp.ReplicationProtectedItems.Any( pi => string.Compare( pi.Id, replicationProtectedItemResponse.Id, StringComparison.OrdinalIgnoreCase) == 0)) { throw new PSArgumentException( string.Format( Resources.VMAlreadyPartOfGroup, rpi.FriendlyName, gp.Name, this.InputObject.FriendlyName)); } } this.InputObject.Groups[this.InputObject.Groups.IndexOf(tempGroup)] .ReplicationProtectedItems .Add(new ReplicationProtectedItem_2016_08_10(replicationProtectedItemResponse)); } else { throw new PSArgumentException( string.Format( Resources.GroupNotFoundInRecoveryPlan, this.Group.Name, this.InputObject.FriendlyName)); } } break; case ASRParameterSets.RemoveReplicationProtectedItems: foreach (var rpi in this.RemoveProtectedItem) { var fabricName = Utilities.GetValueFromArmId( rpi.ID, ARMResourceTypeConstants.ReplicationFabrics); tempGroup = this.InputObject.Groups.FirstOrDefault( g => string.Compare( g.Name, this.Group.Name, StringComparison.OrdinalIgnoreCase) == 0); if (tempGroup != null) { var ReplicationProtectedItem = this.InputObject .Groups[this.InputObject.Groups.IndexOf(tempGroup)] .ReplicationProtectedItems.FirstOrDefault( pi => string.Compare( pi.Id, rpi.ID, StringComparison.OrdinalIgnoreCase) == 0); if (ReplicationProtectedItem != null) { this.InputObject .Groups[this.InputObject.Groups.IndexOf(tempGroup)] .ReplicationProtectedItems.Remove(ReplicationProtectedItem); } else { throw new PSArgumentException( string.Format( Resources.VMNotFoundInGroup, rpi.FriendlyName, this.Group.Name, this.InputObject.FriendlyName)); } } else { throw new PSArgumentException( string.Format( Resources.GroupNotFoundInRecoveryPlan, this.Group.Name, this.InputObject.FriendlyName)); } } break; } this.WriteObject(this.InputObject); } }
/// <summary> /// Update Recovery Plan: By powerShell Recovery Plan object /// </summary> private void UpdateRecoveryPlan( ASRRecoveryPlan asrRecoveryPlan) { var updateRecoveryPlanInputProperties = new UpdateRecoveryPlanInputProperties { Groups = new List <RecoveryPlanGroup>() }; foreach (var asrRecoveryPlanGroup in asrRecoveryPlan.Groups) { var recoveryPlanGroup = new RecoveryPlanGroup { GroupType = asrRecoveryPlanGroup.GroupType, // Initialize ReplicationProtectedItems with empty List if asrRecoveryPlanGroup.ReplicationProtectedItems is null // otherwise assign respective values ReplicationProtectedItems = asrRecoveryPlanGroup.ReplicationProtectedItems == null ? new List <RecoveryPlanProtectedItem>() : asrRecoveryPlanGroup .ReplicationProtectedItems.Select( item => { var newItem = new RecoveryPlanProtectedItem(item.ID); string VmId = null; if (item.ProviderSpecificDetails.GetType() == typeof(ASRHyperVReplicaAzureSpecificRPIDetails)) { VmId = ((ASRHyperVReplicaAzureSpecificRPIDetails)item.ProviderSpecificDetails).VmId; } else if (item.ProviderSpecificDetails.GetType() == typeof(ASRHyperVReplicaRPIDetails)) { VmId = ((ASRHyperVReplicaRPIDetails)item.ProviderSpecificDetails).VmId; } else if (item.ProviderSpecificDetails.GetType() == typeof(ASRHyperVReplicaBlueRPIDetails)) { VmId = ((ASRHyperVReplicaBlueRPIDetails)item.ProviderSpecificDetails).VmId; } else if (item.ProviderSpecificDetails.GetType() == typeof(ASRInMageSpecificRPIDetails)) { VmId = ((ASRInMageSpecificRPIDetails)item.ProviderSpecificDetails).VmId; } else if (item.ProviderSpecificDetails.GetType() == typeof(ASRInMageSpecificRPIDetails)) { VmId = ((ASRInMageSpecificRPIDetails)item.ProviderSpecificDetails).VmId; } newItem.VirtualMachineId = VmId; return(newItem); }) .ToList(), StartGroupActions = asrRecoveryPlanGroup.StartGroupActions == null ? null : asrRecoveryPlanGroup.StartGroupActions.ToList().ConvertAll( action => ASRRecoveryPlanAction.GetSrsRecoveryPlanAction(action)), EndGroupActions = asrRecoveryPlanGroup.EndGroupActions == null ? null : asrRecoveryPlanGroup.EndGroupActions.ToList().ConvertAll( action => ASRRecoveryPlanAction.GetSrsRecoveryPlanAction(action)), }; updateRecoveryPlanInputProperties.Groups.Add(recoveryPlanGroup); } var updateRecoveryPlanInput = new UpdateRecoveryPlanInput { Properties = updateRecoveryPlanInputProperties }; this.UpdateRecoveryPlan( asrRecoveryPlan.Name, updateRecoveryPlanInput); }
/// <summary> /// ProcessRecord of the command. /// </summary> public override void ExecuteSiteRecoveryCmdlet() { base.ExecuteSiteRecoveryCmdlet(); ASRRecoveryPlanGroup tempGroup; switch (this.ParameterSetName) { case ASRParameterSets.AppendGroup: RecoveryPlanGroup recoveryPlanGroup = new RecoveryPlanGroup() { GroupType = Constants.Boot, ReplicationProtectedItems = new List <RecoveryPlanProtectedItem>(), StartGroupActions = new List <RecoveryPlanAction>(), EndGroupActions = new List <RecoveryPlanAction>() }; this.RecoveryPlan.Groups.Add(new ASRRecoveryPlanGroup("Group " + (RecoveryPlan.Groups.Count - 1).ToString(), recoveryPlanGroup)); break; case ASRParameterSets.RemoveGroup: tempGroup = this.RecoveryPlan.Groups.FirstOrDefault(g => String.Compare(g.Name, RemoveGroup.Name, StringComparison.OrdinalIgnoreCase) == 0); if (tempGroup != null) { this.RecoveryPlan.Groups.Remove(tempGroup); this.RecoveryPlan = this.RecoveryPlan.RefreshASRRecoveryPlanGroupNames(); } else { throw new PSArgumentException(string.Format(Properties.Resources.GroupNotFoundInRecoveryPlan, this.RemoveGroup.Name, this.RecoveryPlan.FriendlyName)); } break; case ASRParameterSets.AddProtectedEntities: foreach (ASRProtectionEntity pe in AddProtectedEntities) { string fabricName = Utilities.GetValueFromArmId(pe.ID, ARMResourceTypeConstants.ReplicationFabrics); // fetch the latest PE object ProtectableItemResponse protectableItemResponse = RecoveryServicesClient.GetAzureSiteRecoveryProtectableItem(fabricName, pe.ProtectionContainerId, pe.Name); ReplicationProtectedItemResponse replicationProtectedItemResponse = RecoveryServicesClient.GetAzureSiteRecoveryReplicationProtectedItem(fabricName, pe.ProtectionContainerId, Utilities.GetValueFromArmId(protectableItemResponse.ProtectableItem.Properties.ReplicationProtectedItemId, ARMResourceTypeConstants.ReplicationProtectedItems)); tempGroup = this.RecoveryPlan.Groups.FirstOrDefault(g => String.Compare(g.Name, Group.Name, StringComparison.OrdinalIgnoreCase) == 0); if (tempGroup != null) { foreach (ASRRecoveryPlanGroup gp in this.RecoveryPlan.Groups) { if (gp.ReplicationProtectedItems == null) { continue; } if (gp.ReplicationProtectedItems.Any(pi => String.Compare(pi.Id, replicationProtectedItemResponse.ReplicationProtectedItem.Id, StringComparison.OrdinalIgnoreCase) == 0)) { throw new PSArgumentException(string.Format(Properties.Resources.VMAlreadyPartOfGroup, pe.FriendlyName, gp.Name, this.RecoveryPlan.FriendlyName)); } } this.RecoveryPlan.Groups[RecoveryPlan.Groups.IndexOf(tempGroup)].ReplicationProtectedItems.Add(replicationProtectedItemResponse.ReplicationProtectedItem); } else { throw new PSArgumentException(string.Format(Properties.Resources.GroupNotFoundInRecoveryPlan, this.Group.Name, this.RecoveryPlan.FriendlyName)); } } break; case ASRParameterSets.RemoveProtectedEntities: foreach (ASRProtectionEntity pe in RemoveProtectedEntities) { string fabricName = Utilities.GetValueFromArmId(pe.ID, ARMResourceTypeConstants.ReplicationFabrics); // fetch the latest PE object ProtectableItemResponse protectableItemResponse = RecoveryServicesClient.GetAzureSiteRecoveryProtectableItem(fabricName, pe.ProtectionContainerId, pe.Name); tempGroup = this.RecoveryPlan.Groups.FirstOrDefault(g => String.Compare(g.Name, Group.Name, StringComparison.OrdinalIgnoreCase) == 0); if (tempGroup != null) { var ReplicationProtectedItem = this.RecoveryPlan.Groups[RecoveryPlan.Groups.IndexOf(tempGroup)]. ReplicationProtectedItems. FirstOrDefault(pi => String.Compare(pi.Id, protectableItemResponse.ProtectableItem.Properties.ReplicationProtectedItemId, StringComparison.OrdinalIgnoreCase) == 0); if (ReplicationProtectedItem != null) { this.RecoveryPlan.Groups[RecoveryPlan.Groups.IndexOf(tempGroup)].ReplicationProtectedItems.Remove(ReplicationProtectedItem); } else { throw new PSArgumentException(string.Format(Properties.Resources.VMNotFoundInGroup, pe.FriendlyName, this.Group.Name, this.RecoveryPlan.FriendlyName)); } } else { throw new PSArgumentException(string.Format(Properties.Resources.GroupNotFoundInRecoveryPlan, this.Group.Name, this.RecoveryPlan.FriendlyName)); } } break; } ; this.WriteObject(this.RecoveryPlan); }