/// <summary>
        ///     ProcessRecord of the command.
        /// </summary>
        public override void ExecuteSiteRecoveryCmdlet()
        {
            base.ExecuteSiteRecoveryCmdlet();

            if (this.ShouldProcess(
                    this.ReplicationProtectedItem.FriendlyName,
                    "Switch the appliance"))
            {
                // Set the Fabric Name and Protection Container Name.
                string fabricName = this.Fabric.Name;
                string protectionContainerName = Utilities.GetValueFromArmId(
                    this.ReplicationProtectedItem.ID,
                    ARMResourceTypeConstants.ReplicationProtectionContainers);

                var updateApplianceInput = new UpdateApplianceForReplicationProtectedItemInputProperties();
                if (this.ReplicationProtectedItem.ReplicationProvider.Equals(Constants.InMageRcm))
                {
                    this.InMageRcmValidateSwitchApplianceInput();
                    this.InMageRcmSwitchAppliance(updateApplianceInput);
                }
                else
                {
                    throw new InvalidOperationException(
                              string.Format(
                                  Resources.UnsupportedReplicationProviderOperation,
                                  this.ReplicationProtectedItem.ReplicationProvider,
                                  "SwitchAppliance"));
                }

                var input = new UpdateApplianceForReplicationProtectedItemInput
                {
                    Properties = updateApplianceInput
                };

                // Switch the appliance for protected item.
                var response = this.RecoveryServicesClient.SwitchAppliance(
                    fabricName,
                    protectionContainerName,
                    this.ReplicationProtectedItem.Name,
                    input);

                var jobResponse = this.RecoveryServicesClient.GetAzureSiteRecoveryJobDetails(
                    PSRecoveryServicesClient.GetJobIdFromReponseLocation(response.Location));

                this.WriteObject(new ASRJob(jobResponse));
            }
        }
        /// <summary>
        ///     Switch appliance of a replication protected item.
        /// </summary>
        /// <param name="fabricName">Fabric Name.</param>
        /// <param name="protectionContainerName">Protection Conatiner Name.</param>
        /// <param name="replicationProtectedItemName">Replication Protected Item.</param>
        /// <param name="input">Input for update appliance.</param>
        /// <returns>Job Response.</returns>
        public PSSiteRecoveryLongRunningOperation SwitchAppliance(
            string fabricName,
            string protectionContainerName,
            string replicationProtectedItemName,
            UpdateApplianceForReplicationProtectedItemInput input)
        {
            var op = this.GetSiteRecoveryClient()
                     .ReplicationProtectedItems.BeginUpdateApplianceWithHttpMessagesAsync(
                fabricName,
                protectionContainerName,
                replicationProtectedItemName,
                input,
                this.GetRequestHeaders(true))
                     .GetAwaiter()
                     .GetResult();

            var result = SiteRecoveryAutoMapperProfile.Mapper.Map <PSSiteRecoveryLongRunningOperation>(op);

            return(result);
        }