disable-allPowerShellSessions.ps1

<#
    .SYNOPSIS
 
    This function disables all open powershell sessions.
 
    .DESCRIPTION
 
    This function disables all open powershell sessions.
 
    .OUTPUTS
 
    No return.
 
    #>

    Function disable-allPowerShellSessions
     {

        Out-LogFile -string "********************************************************************************"
        Out-LogFile -string "BEGIN disable-allPowerShellSessions"
        Out-LogFile -string "********************************************************************************"

        out-logfile -string "Determining if the temporary DL should be cleaned up."

        if ($global:DLCleanupInfo -ne $NULL)
        {
            out-logfile -string "Failure occurred prior to full DL creation in Office 365. Remove temporary DL."

            remove-o365CloudOnlyGroup -office365DLConfiguration $global:DLCleanupInfo -dlCleanupRequired:$TRUE
        }
        else {
            out-logfile -string "Skip temporary DL removal."
        }

        out-logfile -string "Determining if the original DL should be moved back to the original OU due to failure."

        if ($global:DLMoveCleanup.originalDLConfiguration -ne $NULL)
        {
            out-logfile -string "The original DL should be moved back to the original group."

            $tempOUSubstring = Get-OULocation -originalDLConfiguration $global:DLMoveCleanup.originalDLConfiguration -errorAction STOP

            move-toNonSyncOU -OU $tempOUSubstring -dn $global:DLMoveCleanup.originalDLConfiguration.objectGUID -adCredential $global:DLMoveCleanup.adCredential -globalCatalogServer $global:DLMoveCleanup.globalCatalogServer -dlMoveCleanup:$TRUE -errorAction SilentlyContinue
        }
        else 
        {
            out-logfile -string "Skip moving original DL to original OU."
        }

        out-logfile "Gathering all PS Sessions"

        try{
            $functionSessions = Get-PSSession -errorAction STOP
        }
        catch
        {
            out-logfile -string "Error getting PSSessions - hard abort since this is called in exit code."
        }

        out-logFile -string "Disconnecting Exchange Online Session"

        foreach ($session in $functionSessions)
        {
            if ($session.computerName -eq "outlook.office365.com")
            {
                try{
                    out-logfile -string $session.id
                    out-logfile -string $session.name
                    out-logfile -string $session.computerName

                    Disconnect-ExchangeOnline -confirm:$FALSE -errorAction STOP
                }
                catch{
                    out-logfile -string "Error removing Exchange Online Session - Hard Exit since this function is called in error code."
                    #EXIT
                }
            }
            else 
            {
                out-logfile -string "Removing other non-Exchange Online powershell sessions."

                out-logfile -string $session.id
                out-logfile -string $session.name
                out-logfile -string $session.computerName

                Get-PSSession | remove-pssession
            }
        }

        try {
            Disconnect-ExchangeOnline -ErrorAction Stop -confirm:$false
        }
        catch {
            out-logfile -string "Error getting PSSessions - hard abort since this is called in exit code."
        }

        try {
            Disconnect-MgGraph -errorAction STOP 
        }
        catch {
            out-logfile -string "Error disconnecting powershell graph - hard abort since this is called in exit code."
        }

        out-logfile -string "***IT MAY BE NECESSARY TO EXIT THIS POWERSHELL WINDOW AND REOPEN TO RESTART FROM A FAILED MIGRATION***"

        Out-LogFile -string "END disable-allPowerShellSessions"
        Out-LogFile -string "********************************************************************************"
    }