Disconnect-Office365.ps1

function Disconnect-Office365 {
    <#
        .SYNOPSIS
        Disconnect from one or more Office 365 services using Powershell.
         
        .DESCRIPTION
        Disconnect from one or more Office 365 services using Powershell.
        Some services requires the installation of separate PowerShell modules or binaires:
        AzureAD requires a separate module - https://www.powershellgallery.com/packages/AzureAD/ or cmdlet "Install-Module -Name AzureAD"
        MsolService requraes a seprate module - http://go.microsoft.com/fwlink/?linkid=236297
        Sharepoint Online requires a separate module - https://www.microsoft.com/en-us/download/details.aspx?id=35588
        Skype for Business Online requires a separate module - https://www.microsoft.com/en-us/download/details.aspx?id=39366
        Exchange Online, Exchange Online Protection, Complince Center does not require seperate binaries.
 
        .EXAMPLE
        Disconnect-Office365
         
 
        VERBOSE: Disconnecting from all Office 365 Services.
 
        This command disconnects from all Office 365 service sessions that are available and running.
 
        .EXAMPLE
        Disconnect-Office365 -Service ComplianceCenter, ExchangeOnline, AzureAD
 
 
        VERBOSE: Disconnecting from AzureAD.
        VERBOSE: Azure AD Session is now closed.
        VERBOSE: Disconnecting from Compliance Center.
        VERBOSE: The Compliance Center Online PSSession is now closed.
        VERBOSE: Disconnecting from Exchange Online.
        VERBOSE: The Exchange Online PSSession is now closed.
 
        This command disconnects from AzureAD, Compliance Center and Exchange Online service sessions that are available and running.
 
        .LINK
        https://github.com/PhilipHaglund/Office365Connect/
        https://gonjer.com/
    #>

    [CmdletBinding(
        SupportsShouldProcess = $true
    )]
    param(
        # Provide one or more Office 365 services to disconnect from.
        # Valid values are:
        # 'AllServices', 'AzureAD', 'ComplianceCenter', 'ExchangeOnline', 'ExchangeOnlineProtection', 'MSOnline', 'SharepointOnline' ,'SkypeforBusinessOnline'
        [Parameter(
            ValueFromPipeline = $true            
        )]
        [ValidateSet('AllServices', 'AzureAD', 'ComplianceCenter', 'ExchangeOnline', 'ExchangeOnlineProtection', 'MSOnline', 'SharepointOnline' ,'SkypeforBusinessOnline')]
        [ValidateNotNullOrEmpty()]
        [string[]]$Service = @('AllServices')
    )
    begin {

        if (($service = $Service | Sort-Object -Unique).Count -gt 6) {
            $Service = 'AllServices'
        }
    }
    process {

        foreach ($s in $Service) {

            if ($PSCmdlet.ShouldProcess('End the PowerShell session for {0} - Office 365.' -f ('{0}' -f $s), $MyInvocation.MyCommand.Name)) {

                switch ($s) {

                    'AzureAD' {
                        Write-Verbose -Message 'Disconnecting from AzureAD.' -Verbose
                        Disconnect-AzureADOnline
                    }
                    'MSOnline' {
                        Write-Verbose -Message 'Disconnecting from MsolService.' -Verbose
                        Disconnect-MsolServiceOnline
                    }
                    'ComplianceCenter' {
                        Write-Verbose -Message 'Disconnecting from Compliance Center.' -Verbose
                        Disconnect-CCOnline
                    }
                    'ExchangeOnline' {
                        Write-Verbose -Message 'Disconnecting from Exchange Online.' -Verbose
                        Disconnect-ExchangeOnline
                    }
                    'ExchangeOnlineProtection' {
                        Write-Verbose -Message 'Disconnecting from Exchange Online Protection.' -Verbose
                        Disconnect-ExchangeOnlineProt
                    }
                    'SharepointOnline' {
                        Write-Verbose -Message 'Disconnecting from Sharepoint Online.' -Verbose
                        Disconnect-SPOnline
                    }
                    'SkypeforBusinessOnline' {
                        Write-Verbose -Message 'Disconnecting from Skype for Business Online.' -Verbose
                        Disconnect-SfBOnline
                    }
                    Default {
                        Write-Verbose -Message 'Disconnecting from all Office 365 Services.' -Verbose
                        Disconnect-AzureADOnline
                        Disconnect-MsolServiceOnline
                        Disconnect-CCOnline
                        Disconnect-ExchangeOnline
                        Disconnect-ExchangeOnlineProt
                        Disconnect-SPOnline
                        Disconnect-SfBOnline
                    }
                }
                
            }
        }
    }
    end {

        # If the saved credentials variables for some reason is not removed we remove them again.
        Remove-Variable -Name Credential -ErrorAction SilentlyContinue
    }
}