private List <VMNicInputDetails> getNicListToUpdate(IList <VMNicDetails> vmNicList) { var vMNicInputDetailsList = new List <VMNicInputDetails>(); // Weather to track Nic found to be updated. IF primary nic is not or empty no need to update. var nicFoundToBeUpdated = string.IsNullOrEmpty(this.PrimaryNic); if (vmNicList != null) { foreach (var nDetails in vmNicList) { var vMNicInputDetails = new VMNicInputDetails(); if (!string.IsNullOrEmpty(this.PrimaryNic) && string.Compare(nDetails.NicId, this.PrimaryNic, StringComparison.OrdinalIgnoreCase) == 0) { vMNicInputDetails.NicId = this.PrimaryNic; vMNicInputDetails.RecoveryVMSubnetName = this.RecoveryNicSubnetName; vMNicInputDetails.ReplicaNicStaticIPAddress = this.RecoveryNicStaticIPAddress; vMNicInputDetails.SelectionType = string.IsNullOrEmpty(this.NicSelectionType) ? Constants.SelectedByUser : this.NicSelectionType; vMNicInputDetailsList.Add(vMNicInputDetails); // NicId matched for updation nicFoundToBeUpdated = true; } else { vMNicInputDetails.NicId = nDetails.NicId; vMNicInputDetails.RecoveryVMSubnetName = nDetails.RecoveryVMSubnetName; vMNicInputDetails.ReplicaNicStaticIPAddress = nDetails.ReplicaNicStaticIPAddress; vMNicInputDetails.SelectionType = nDetails.SelectionType; vMNicInputDetailsList.Add(vMNicInputDetails); } } } if (!nicFoundToBeUpdated) { throw new PSInvalidOperationException(Resources.NicNotFoundInVMForUpdateVmProperties); } return(vMNicInputDetailsList); }
/// <summary> /// ProcessRecord of the command. /// </summary> public override void ExecuteSiteRecoveryCmdlet() { base.ExecuteSiteRecoveryCmdlet(); ProtectableItemResponse protectableItemResponse = RecoveryServicesClient.GetAzureSiteRecoveryProtectableItem(Utilities.GetValueFromArmId(this.VirtualMachine.ID, ARMResourceTypeConstants.ReplicationFabrics), this.VirtualMachine.ProtectionContainerId, this.VirtualMachine.Name); if (protectableItemResponse.ProtectableItem.Properties.ReplicationProtectedItemId == null) { this.WriteWarning(Properties.Resources.ProtectionIsNotEnabledForVM.ToString()); return; } ReplicationProtectedItemResponse replicationProtectedItemResponse = RecoveryServicesClient.GetAzureSiteRecoveryReplicationProtectedItem(Utilities.GetValueFromArmId(this.VirtualMachine.ID, ARMResourceTypeConstants.ReplicationFabrics), this.VirtualMachine.ProtectionContainerId, Utilities.GetValueFromArmId(protectableItemResponse.ProtectableItem.Properties.ReplicationProtectedItemId, ARMResourceTypeConstants.ReplicationProtectedItems)); // Check for Replication Provider type HyperVReplicaAzure if (0 != string.Compare( replicationProtectedItemResponse.ReplicationProtectedItem.Properties.ProviderSpecificDetails.InstanceType, Constants.HyperVReplicaAzure, StringComparison.OrdinalIgnoreCase)) { this.WriteWarning(Properties.Resources.UnsupportedReplicationProvidedForUpdateVmProperties.ToString()); return; } // Check for at least one option if (string.IsNullOrEmpty(this.Name) && string.IsNullOrEmpty(this.Size) && string.IsNullOrEmpty(this.PrimaryNic) && string.IsNullOrEmpty(this.RecoveryNetworkId)) { this.WriteWarning(Properties.Resources.ArgumentsMissingForUpdateVmProperties.ToString()); return; } // Both primary & recovery inputs should be present if (string.IsNullOrEmpty(this.PrimaryNic) ^ string.IsNullOrEmpty(this.RecoveryNetworkId)) { this.WriteWarning(Properties.Resources.NetworkArgumentsMissingForUpdateVmProperties.ToString()); return; } List <VMNicInputDetails> vMNicInputDetailsList = new List <VMNicInputDetails>(); VMNicDetails vMNicDetailsToBeUpdated; if (!string.IsNullOrEmpty(this.PrimaryNic)) { HyperVReplicaAzureReplicationDetails providerSpecificDetails = (HyperVReplicaAzureReplicationDetails)replicationProtectedItemResponse.ReplicationProtectedItem.Properties.ProviderSpecificDetails; if (providerSpecificDetails.VMNics != null) { vMNicDetailsToBeUpdated = providerSpecificDetails.VMNics.SingleOrDefault(n => string.Compare(n.NicId, this.PrimaryNic, StringComparison.OrdinalIgnoreCase) == 0); if (vMNicDetailsToBeUpdated != null) { VMNicInputDetails vMNicInputDetails = new VMNicInputDetails(); vMNicInputDetails.NicId = this.PrimaryNic; vMNicInputDetails.RecoveryVMSubnetName = this.RecoveryNicSubnetName; vMNicInputDetails.ReplicaNicStaticIPAddress = this.RecoveryNicStaticIPAddress; vMNicInputDetails.SelectionType = string.IsNullOrEmpty(this.NicSelectionType) ? Constants.SelectedByUser : this.NicSelectionType; vMNicInputDetailsList.Add(vMNicInputDetails); IEnumerable <VMNicDetails> vMNicDetailsListRemaining = providerSpecificDetails.VMNics.Where(n => string.Compare(n.NicId, this.PrimaryNic, StringComparison.OrdinalIgnoreCase) != 0); foreach (VMNicDetails nDetails in vMNicDetailsListRemaining) { vMNicInputDetails = new VMNicInputDetails(); vMNicInputDetails.NicId = nDetails.NicId; vMNicInputDetails.RecoveryVMSubnetName = nDetails.RecoveryVMSubnetName; vMNicInputDetails.ReplicaNicStaticIPAddress = nDetails.ReplicaNicStaticIPAddress; vMNicInputDetails.SelectionType = nDetails.SelectionType; vMNicInputDetailsList.Add(vMNicInputDetails); } } else { throw new PSInvalidOperationException(Properties.Resources.NicNotFoundInVMForUpdateVmProperties); } } } UpdateReplicationProtectedItemInputProperties updateReplicationProtectedItemInputProperties = new UpdateReplicationProtectedItemInputProperties() { RecoveryAzureVMName = this.Name, RecoveryAzureVMSize = this.Size, SelectedRecoveryAzureNetworkId = this.RecoveryNetworkId, VmNics = vMNicInputDetailsList }; UpdateReplicationProtectedItemInput input = new UpdateReplicationProtectedItemInput() { Properties = updateReplicationProtectedItemInputProperties }; LongRunningOperationResponse response = RecoveryServicesClient.UpdateVmProperties( Utilities.GetValueFromArmId(this.VirtualMachine.ID, ARMResourceTypeConstants.ReplicationFabrics), Utilities.GetValueFromArmId(this.VirtualMachine.ID, ARMResourceTypeConstants.ReplicationProtectionContainers), replicationProtectedItemResponse.ReplicationProtectedItem.Name, input); JobResponse jobResponse = RecoveryServicesClient .GetAzureSiteRecoveryJobDetails(PSRecoveryServicesClient.GetJobIdFromReponseLocation(response.Location)); WriteObject(new ASRJob(jobResponse.Job)); }
private List <VMNicInputDetails> getNicListToUpdate(IList <VMNicDetails> vmNicList) { var vMNicInputDetailsList = new List <VMNicInputDetails>(); // Weather to track NIC found to be updated. IF primary NIC is not or empty no need to update. var nicFoundToBeUpdated = string.IsNullOrEmpty(this.UpdateNic); if (vmNicList != null) { foreach (var nDetails in vmNicList) { var vMNicInputDetails = new VMNicInputDetails(); if (!string.IsNullOrEmpty(this.UpdateNic) && string.Compare(nDetails.NicId, this.UpdateNic, StringComparison.OrdinalIgnoreCase) == 0) { vMNicInputDetails.NicId = this.UpdateNic; vMNicInputDetails.RecoveryVMSubnetName = this.RecoveryNicSubnetName; vMNicInputDetails.ReplicaNicStaticIPAddress = this.RecoveryNicStaticIPAddress; vMNicInputDetails.SelectionType = string.IsNullOrEmpty(this.NicSelectionType) ? Constants.SelectedByUser : this.NicSelectionType; vMNicInputDetails.RecoveryLBBackendAddressPoolIds = this.RecoveryLBBackendAddressPoolId?.ToList(); vMNicInputDetails.RecoveryPublicIpAddressId = this.RecoveryPublicIPAddressId; vMNicInputDetails.RecoveryNetworkSecurityGroupId = this.RecoveryNetworkSecurityGroupId; vMNicInputDetailsList.Add(vMNicInputDetails); // NicId matched for update nicFoundToBeUpdated = true; if (this.MyInvocation.BoundParameters.ContainsKey( Utilities.GetMemberName(() => this.EnableAcceleratedNetworkingOnRecovery))) { vMNicInputDetails.EnableAcceleratedNetworkingOnRecovery = true; } else { vMNicInputDetails.EnableAcceleratedNetworkingOnRecovery = false; } } else { vMNicInputDetails.NicId = nDetails.NicId; vMNicInputDetails.RecoveryVMSubnetName = nDetails.RecoveryVMSubnetName; vMNicInputDetails.ReplicaNicStaticIPAddress = nDetails.ReplicaNicStaticIPAddress; vMNicInputDetails.SelectionType = nDetails.SelectionType; vMNicInputDetailsList.Add(vMNicInputDetails); vMNicInputDetails.EnableAcceleratedNetworkingOnRecovery = nDetails.EnableAcceleratedNetworkingOnRecovery; vMNicInputDetails.RecoveryLBBackendAddressPoolIds = nDetails.RecoveryLBBackendAddressPoolIds; vMNicInputDetails.RecoveryPublicIpAddressId = nDetails.RecoveryPublicIpAddressId; vMNicInputDetails.RecoveryNetworkSecurityGroupId = nDetails.RecoveryNetworkSecurityGroupId; } } } if (!nicFoundToBeUpdated) { throw new PSInvalidOperationException(Resources.NicNotFoundInVMForUpdateVmProperties); } return(vMNicInputDetailsList); }
private List <VMNicInputDetails> getNicListToUpdate(IList <VMNicDetails> vmNicList) { var vMNicInputDetailsList = new List <VMNicInputDetails>(); // Weather to track NIC found to be updated. IF primary NIC is not or empty no need to update. var nicFoundToBeUpdated = string.IsNullOrEmpty(this.UpdateNic); if (vmNicList != null) { // If VM NICs list provided along with UpdateNic then only the NICs list is // honored. if (this.ASRVMNicConfiguration != null && this.ASRVMNicConfiguration.Count() > 0) { var vmNicIds = vmNicList.Select(nic => nic.NicId); foreach (var nic in this.ASRVMNicConfiguration) { if (!vmNicIds.Contains(nic.NicId, StringComparer.OrdinalIgnoreCase)) { throw new PSInvalidOperationException( Resources.NicNotFoundInVMForUpdateVmProperties); } var vMNicInputDetails = new VMNicInputDetails(); vMNicInputDetails.NicId = nic.NicId; vMNicInputDetails.RecoveryNicName = nic.RecoveryNicName; vMNicInputDetails.RecoveryNicResourceGroupName = nic.RecoveryNicResourceGroupName; vMNicInputDetails.ReuseExistingNic = nic.ReuseExistingNic; vMNicInputDetails.RecoveryVMSubnetName = nic.RecoveryVMSubnetName; vMNicInputDetails.EnableAcceleratedNetworkingOnRecovery = nic.EnableAcceleratedNetworkingOnRecovery; vMNicInputDetails.RecoveryNetworkSecurityGroupId = nic.RecoveryNetworkSecurityGroupId; vMNicInputDetails.ReplicaNicStaticIPAddress = nic.RecoveryIPConfigs?.FirstOrDefault()?.StaticIPAddress; vMNicInputDetails.RecoveryPublicIpAddressId = nic.RecoveryIPConfigs?.FirstOrDefault()?.PublicIpAddressId; vMNicInputDetails.RecoveryLBBackendAddressPoolIds = nic.RecoveryIPConfigs?.FirstOrDefault()?.LBBackendAddressPoolIds; vMNicInputDetails.TfoNicName = nic.TfoNicName; vMNicInputDetails.TfoNicResourceGroupName = nic.TfoNicResourceGroupName; vMNicInputDetails.TfoReuseExistingNic = nic.TfoReuseExistingNic; vMNicInputDetails.TfoVMSubnetName = nic.TfoVMSubnetName; vMNicInputDetails.EnableAcceleratedNetworkingOnTfo = nic.EnableAcceleratedNetworkingOnTfo; vMNicInputDetails.TfoNetworkSecurityGroupId = nic.TfoNetworkSecurityGroupId; vMNicInputDetails.TfoIPConfigs = nic.TfoIPConfigs; vMNicInputDetails.SelectionType = string.IsNullOrEmpty(this.NicSelectionType) ? Constants.SelectedByUser : this.NicSelectionType; vMNicInputDetailsList.Add(vMNicInputDetails); } return(vMNicInputDetailsList); } foreach (var nDetails in vmNicList) { var vMNicInputDetails = new VMNicInputDetails(); if (!string.IsNullOrEmpty(this.UpdateNic) && string.Compare(nDetails.NicId, this.UpdateNic, StringComparison.OrdinalIgnoreCase) == 0) { vMNicInputDetails.NicId = this.UpdateNic; vMNicInputDetails.RecoveryVMSubnetName = this.RecoveryNicSubnetName; vMNicInputDetails.ReplicaNicStaticIPAddress = this.RecoveryNicStaticIPAddress; vMNicInputDetails.SelectionType = string.IsNullOrEmpty(this.NicSelectionType) ? Constants.SelectedByUser : this.NicSelectionType; vMNicInputDetails.RecoveryLBBackendAddressPoolIds = this.RecoveryLBBackendAddressPoolId?.ToList(); vMNicInputDetails.RecoveryPublicIpAddressId = this.RecoveryPublicIPAddressId; vMNicInputDetails.RecoveryNetworkSecurityGroupId = this.RecoveryNetworkSecurityGroupId; vMNicInputDetailsList.Add(vMNicInputDetails); // NicId matched for update nicFoundToBeUpdated = true; if (this.MyInvocation.BoundParameters.ContainsKey( Utilities.GetMemberName(() => this.EnableAcceleratedNetworkingOnRecovery))) { vMNicInputDetails.EnableAcceleratedNetworkingOnRecovery = true; } else { vMNicInputDetails.EnableAcceleratedNetworkingOnRecovery = false; } } else { vMNicInputDetails.NicId = nDetails.NicId; vMNicInputDetails.RecoveryVMSubnetName = nDetails.RecoveryVMSubnetName; vMNicInputDetails.ReplicaNicStaticIPAddress = nDetails.ReplicaNicStaticIPAddress; vMNicInputDetails.SelectionType = nDetails.SelectionType; vMNicInputDetailsList.Add(vMNicInputDetails); vMNicInputDetails.EnableAcceleratedNetworkingOnRecovery = nDetails.EnableAcceleratedNetworkingOnRecovery; vMNicInputDetails.RecoveryLBBackendAddressPoolIds = nDetails.RecoveryLBBackendAddressPoolIds; vMNicInputDetails.RecoveryPublicIpAddressId = nDetails.RecoveryPublicIpAddressId; vMNicInputDetails.RecoveryNetworkSecurityGroupId = nDetails.RecoveryNetworkSecurityGroupId; } } } if (!nicFoundToBeUpdated) { throw new PSInvalidOperationException(Resources.NicNotFoundInVMForUpdateVmProperties); } return(vMNicInputDetailsList); }
/// <summary> /// ProcessRecord of the command. /// </summary> public override void ExecuteSiteRecoveryCmdlet() { base.ExecuteSiteRecoveryCmdlet(); if (this.ShouldProcess( this.InputObject.FriendlyName, VerbsCommon.Set)) { var replicationProtectedItemResponse = this.RecoveryServicesClient .GetAzureSiteRecoveryReplicationProtectedItem( Utilities.GetValueFromArmId( this.InputObject.ID, ARMResourceTypeConstants.ReplicationFabrics), Utilities.GetValueFromArmId( this.InputObject.ID, ARMResourceTypeConstants.ReplicationProtectionContainers), this.InputObject.Name); var provider = replicationProtectedItemResponse.Properties.ProviderSpecificDetails; // Check for Replication Provider type HyperVReplicaAzure/InMageAzureV2 if (!(provider is HyperVReplicaAzureReplicationDetails) && !(provider is InMageAzureV2ReplicationDetails)) { this.WriteWarning( Resources.UnsupportedReplicationProvidedForUpdateVmProperties); return; } // Check for at least one option if (string.IsNullOrEmpty(this.Name) && string.IsNullOrEmpty(this.Size) && string.IsNullOrEmpty(this.PrimaryNic) && string.IsNullOrEmpty(this.RecoveryNetworkId) && string.IsNullOrEmpty(this.RecoveryResourceGroupId) && string.IsNullOrEmpty(this.LicenseType)) { this.WriteWarning(Resources.ArgumentsMissingForUpdateVmProperties); return; } // Both primary & recovery inputs should be present if (string.IsNullOrEmpty(this.PrimaryNic) ^ string.IsNullOrEmpty(this.RecoveryNetworkId)) { this.WriteWarning(Resources.NetworkArgumentsMissingForUpdateVmProperties); return; } var vmName = this.Name; var vmSize = this.Size; var vmRecoveryNetworkId = this.RecoveryNetworkId; var licenseType = this.LicenseType; var recoveryResourceGroupId = this.RecoveryResourceGroupId; var vMNicInputDetailsList = new List <VMNicInputDetails>(); VMNicDetails vMNicDetailsToBeUpdated; var providerSpecificInput = new UpdateReplicationProtectedItemProviderInput(); if (provider is HyperVReplicaAzureReplicationDetails) { var providerSpecificDetails = (HyperVReplicaAzureReplicationDetails)replicationProtectedItemResponse .Properties.ProviderSpecificDetails; if (string.IsNullOrEmpty(this.RecoveryResourceGroupId)) { recoveryResourceGroupId = providerSpecificDetails.RecoveryAzureResourceGroupId; } var deploymentType = Utilities.GetValueFromArmId( providerSpecificDetails.RecoveryAzureStorageAccount, ARMResourceTypeConstants.Providers); if (deploymentType.ToLower() .Contains(Constants.Classic.ToLower())) { providerSpecificInput = new HyperVReplicaAzureUpdateReplicationProtectedItemInput { RecoveryAzureV1ResourceGroupId = recoveryResourceGroupId, RecoveryAzureV2ResourceGroupId = null }; } else { providerSpecificInput = new HyperVReplicaAzureUpdateReplicationProtectedItemInput { RecoveryAzureV1ResourceGroupId = null, RecoveryAzureV2ResourceGroupId = recoveryResourceGroupId }; } if (string.IsNullOrEmpty(this.Name)) { vmName = providerSpecificDetails.RecoveryAzureVMName; } if (string.IsNullOrEmpty(this.Size)) { vmSize = providerSpecificDetails.RecoveryAzureVMSize; } if (string.IsNullOrEmpty(this.RecoveryNetworkId)) { vmRecoveryNetworkId = providerSpecificDetails .SelectedRecoveryAzureNetworkId; } if (string.IsNullOrEmpty(this.LicenseType)) { //licenseType = providerSpecificDetails.LicenseType; } if (!string.IsNullOrEmpty(this.PrimaryNic)) { if (providerSpecificDetails.VmNics != null) { vMNicDetailsToBeUpdated = providerSpecificDetails.VmNics.SingleOrDefault( n => string.Compare( n.NicId, this.PrimaryNic, StringComparison.OrdinalIgnoreCase) == 0); if (vMNicDetailsToBeUpdated != null) { var vMNicInputDetails = new VMNicInputDetails(); vMNicInputDetails.NicId = this.PrimaryNic; vMNicInputDetails.RecoveryVMSubnetName = this.RecoveryNicSubnetName; vMNicInputDetails.ReplicaNicStaticIPAddress = this.RecoveryNicStaticIPAddress; vMNicInputDetails.SelectionType = string.IsNullOrEmpty(this.NicSelectionType) ? Constants.SelectedByUser : this.NicSelectionType; vMNicInputDetailsList.Add(vMNicInputDetails); var vMNicDetailsListRemaining = providerSpecificDetails.VmNics.Where( n => string.Compare( n.NicId, this.PrimaryNic, StringComparison.OrdinalIgnoreCase) != 0); foreach (var nDetails in vMNicDetailsListRemaining) { vMNicInputDetails = new VMNicInputDetails(); vMNicInputDetails.NicId = nDetails.NicId; vMNicInputDetails.RecoveryVMSubnetName = nDetails.RecoveryVMSubnetName; vMNicInputDetails.ReplicaNicStaticIPAddress = nDetails.ReplicaNicStaticIPAddress; vMNicInputDetails.SelectionType = nDetails.SelectionType; vMNicInputDetailsList.Add(vMNicInputDetails); } } else { throw new PSInvalidOperationException( Resources.NicNotFoundInVMForUpdateVmProperties); } } } else { VMNicInputDetails vMNicInputDetails; foreach (var nDetails in providerSpecificDetails.VmNics) { vMNicInputDetails = new VMNicInputDetails(); vMNicInputDetails.NicId = nDetails.NicId; vMNicInputDetails.RecoveryVMSubnetName = nDetails.RecoveryVMSubnetName; vMNicInputDetails.ReplicaNicStaticIPAddress = nDetails.ReplicaNicStaticIPAddress; vMNicInputDetails.SelectionType = nDetails.SelectionType; vMNicInputDetailsList.Add(vMNicInputDetails); } } } else if (provider is InMageAzureV2ReplicationDetails) { var providerSpecificDetails = (InMageAzureV2ReplicationDetails)replicationProtectedItemResponse.Properties .ProviderSpecificDetails; if (string.IsNullOrEmpty(this.RecoveryResourceGroupId)) { recoveryResourceGroupId = providerSpecificDetails.RecoveryAzureResourceGroupId; } var deploymentType = Utilities.GetValueFromArmId( providerSpecificDetails.RecoveryAzureStorageAccount, ARMResourceTypeConstants.Providers); if (deploymentType.ToLower() .Contains(Constants.Classic.ToLower())) { providerSpecificInput = new InMageAzureV2UpdateReplicationProtectedItemInput { RecoveryAzureV1ResourceGroupId = recoveryResourceGroupId, RecoveryAzureV2ResourceGroupId = null }; } else { providerSpecificInput = new InMageAzureV2UpdateReplicationProtectedItemInput { RecoveryAzureV1ResourceGroupId = null, RecoveryAzureV2ResourceGroupId = recoveryResourceGroupId }; } if (string.IsNullOrEmpty(this.Name)) { vmName = providerSpecificDetails.RecoveryAzureVMName; } if (string.IsNullOrEmpty(this.Size)) { vmSize = providerSpecificDetails.RecoveryAzureVMSize; } if (string.IsNullOrEmpty(this.RecoveryNetworkId)) { vmRecoveryNetworkId = providerSpecificDetails .SelectedRecoveryAzureNetworkId; } if (string.IsNullOrEmpty(this.LicenseType)) { //licenseType = providerSpecificDetails.LicenseType; } if (!string.IsNullOrEmpty(this.PrimaryNic)) { if (providerSpecificDetails.VmNics != null) { vMNicDetailsToBeUpdated = providerSpecificDetails.VmNics.SingleOrDefault( n => string.Compare( n.NicId, this.PrimaryNic, StringComparison.OrdinalIgnoreCase) == 0); if (vMNicDetailsToBeUpdated != null) { var vMNicInputDetails = new VMNicInputDetails(); vMNicInputDetails.NicId = this.PrimaryNic; vMNicInputDetails.RecoveryVMSubnetName = this.RecoveryNicSubnetName; vMNicInputDetails.ReplicaNicStaticIPAddress = this.RecoveryNicStaticIPAddress; vMNicInputDetails.SelectionType = string.IsNullOrEmpty(this.NicSelectionType) ? Constants.SelectedByUser : this.NicSelectionType; vMNicInputDetailsList.Add(vMNicInputDetails); var vMNicDetailsListRemaining = providerSpecificDetails.VmNics.Where( n => string.Compare( n.NicId, this.PrimaryNic, StringComparison.OrdinalIgnoreCase) != 0); foreach (var nDetails in vMNicDetailsListRemaining) { vMNicInputDetails = new VMNicInputDetails(); vMNicInputDetails.NicId = nDetails.NicId; vMNicInputDetails.RecoveryVMSubnetName = nDetails.RecoveryVMSubnetName; vMNicInputDetails.ReplicaNicStaticIPAddress = nDetails.ReplicaNicStaticIPAddress; vMNicInputDetails.SelectionType = nDetails.SelectionType; vMNicInputDetailsList.Add(vMNicInputDetails); } } else { throw new PSInvalidOperationException( Resources.NicNotFoundInVMForUpdateVmProperties); } } } else { VMNicInputDetails vMNicInputDetails; foreach (var nDetails in providerSpecificDetails.VmNics) { vMNicInputDetails = new VMNicInputDetails(); vMNicInputDetails.NicId = nDetails.NicId; vMNicInputDetails.RecoveryVMSubnetName = nDetails.RecoveryVMSubnetName; vMNicInputDetails.ReplicaNicStaticIPAddress = nDetails.ReplicaNicStaticIPAddress; vMNicInputDetails.SelectionType = nDetails.SelectionType; vMNicInputDetailsList.Add(vMNicInputDetails); } } } var updateReplicationProtectedItemInputProperties = new UpdateReplicationProtectedItemInputProperties { RecoveryAzureVMName = vmName, RecoveryAzureVMSize = vmSize, SelectedRecoveryAzureNetworkId = vmRecoveryNetworkId, VmNics = vMNicInputDetailsList, LicenseType = licenseType == Management.RecoveryServices.SiteRecovery.Models.LicenseType .NoLicenseType.ToString() ? Management.RecoveryServices.SiteRecovery.Models.LicenseType .NoLicenseType : Management.RecoveryServices.SiteRecovery.Models.LicenseType .WindowsServer, ProviderSpecificDetails = providerSpecificInput }; var input = new UpdateReplicationProtectedItemInput { Properties = updateReplicationProtectedItemInputProperties }; var response = this.RecoveryServicesClient.UpdateVmProperties( Utilities.GetValueFromArmId( this.InputObject.ID, ARMResourceTypeConstants.ReplicationFabrics), Utilities.GetValueFromArmId( this.InputObject.ID, ARMResourceTypeConstants.ReplicationProtectionContainers), this.InputObject.Name, input); var jobResponse = this.RecoveryServicesClient.GetAzureSiteRecoveryJobDetails( PSRecoveryServicesClient.GetJobIdFromReponseLocation(response.Location)); this.WriteObject(new ASRJob(jobResponse)); } }