/// <summary>
        /// Run the cmdlet.
        /// </summary>
        protected override void ProcessRecord()
        {
            // Auth
            SdkAuthResult authResult;

            if (this.ParameterSetName == ParameterSetAppOnly)
            {
                // App-only auth
                authResult = AuthUtils.AuthWithClientCredentials(this.ClientSecret);
            }
            else if (this.ParameterSetName == ParameterSetCertificateThumbprint)
            {
                authResult = AuthUtils.AuthWithCertificateThumbprint(this.CertificateThumbprint);
            }

            else
            {
                // User auth
#if NETFRAMEWORK
                switch (this.ParameterSetName)
                {
                case ParameterSetPSCredential:
                    System.Net.NetworkCredential networkCreds = this.Credential.GetNetworkCredential();
                    authResult = AuthUtils.AuthWithUserCredentials(networkCreds.UserName, networkCreds.Password);
                    break;

                case ParameterSetCertificate:
                    // TODO: Implement Certificate auth
                    throw new PSNotImplementedException();

                case ParameterSetForceInteractive:
                    authResult = AuthUtils.Auth(Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior.SelectAccount);
                    break;

                case ParameterSetForceNonInteractive:
                    authResult = AuthUtils.Auth(Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior.Never);
                    break;

                case ParameterSetAdminConsent:
                    authResult = AuthUtils.GrantAdminConsent();
                    break;

                default:
                    authResult = AuthUtils.Auth();
                    break;
                }
#else
                authResult = AuthUtils.AuthWithDeviceCode(
                    displayDeviceCodeMessageToUser: (deviceCodeMessage) =>
                {
                    this.WriteWarning(deviceCodeMessage);
                },
                    useAdminConsentFlow: this.AdminConsent
                    );
#endif
            }

            // Decide what to return
            if (!this.Quiet)
            {
                if (this.PassThru)
                {
                    // Return the access token
                    this.WriteObject(authResult.AccessToken);
                }
                else
                {
                    // Return details about the logged in user
                    this.WriteObject(authResult.PSUserDisplayableInformation);
                }
            }
        }