Public/Migration/MailboxMove/Test/Set-TimedMailboxMove.ps1

function Set-TimedMailboxMove {

    [CmdletBinding(DefaultParameterSetName = 'PlaceHolder')]
    param (
        [Parameter(Mandatory, ParameterSetName = 'All')]
        [String]
        $Tenant,

        [Parameter(ParameterSetName = 'All')]
        [switch]
        $GCCHigh,

        [Parameter(Mandatory, ParameterSetName = 'Resume')]
        [Parameter(ParameterSetName = 'All')]
        [switch]
        $Resume,

        [Parameter(Mandatory, ParameterSetName = 'Suspend')]
        [Parameter(ParameterSetName = 'All')]
        [switch]
        $Suspend
    )

    Get-PSSession | Remove-PSSession
    Connect-Cloud -Tenant $Tenant -EXOCBA -GCCHigh:$GCCHigh -NoTranscript
    if ($Suspend) {
        $SuspendList = Get-MoveRequest -ResultSize Unlimited -MoveStatus InProgress
        foreach ($Sus in $SuspendList) {
            try {
                Suspend-MoveRequest -Identity $Sus.ExchangeGuid -Confirm:$false
                [PSCustomObject]@{
                    DisplayName  = $Sus.DisplayName
                    BatchName    = $Sus.BatchName
                    ExchangeGuid = $Sus.ExchangeGuid
                    Action       = 'SUSPEND'
                    Result       = 'SUCCESS'
                    Log          = 'SUCCESS'
                }
            }
            catch {
                [PSCustomObject]@{
                    DisplayName  = $Sus.DisplayName
                    BatchName    = $Sus.BatchName
                    ExchangeGuid = $Sus.ExchangeGuid
                    Action       = 'SUSPEND'
                    Result       = 'FAILED'
                    Log          = $_.Exception.Message
                }
            }
        }
    }
    if ($Resume) {
        $ResumeList = Get-MoveRequest -ResultSize Unlimited | Where-Object { $_.Status -match 'Failed|Suspended|AutoSuspended' }
        foreach ($Res in $ResumeList) {
            try {
                Resume-MoveRequest -Identity $Res.ExchangeGuid -SuspendWhenReadyToComplete:$true
                [PSCustomObject]@{
                    DisplayName  = $Res.DisplayName
                    BatchName    = $Res.BatchName
                    ExchangeGuid = $Res.ExchangeGuid
                    Action       = 'RESUME'
                    Result       = 'SUCCESS'
                    Log          = 'SUCCESS'
                }
            }
            catch {
                [PSCustomObject]@{
                    DisplayName  = $Res.DisplayName
                    BatchName    = $Res.BatchName
                    ExchangeGuid = $Res.ExchangeGuid
                    Action       = 'RESUME'
                    Result       = 'FAILED'
                    Log          = $_.Exception.Message
                }
            }
        }
    }
}