Private/Migration/Invoke-CompleteMailboxMove.ps1
function Invoke-CompleteMailboxMove { param ( [Parameter(ValueFromPipeline, Mandatory)] [ValidateNotNullOrEmpty()] $UserList, [Parameter()] [ValidateNotNullOrEmpty()] $CompleteAfter ) begin { # CompleteAfter:$false # Remove Suspendwhenreadytocomplete # No need to resume if Complete is $False if ($CompleteAfter) { $LocalTime = $CompleteAfter.ToLocalTime() $UTCTime = $CompleteAfter } else { $Yesterday = (Get-Date).AddDays(-1) $LocalTime = $Yesterday $UTCTime = $Yesterday.ToUniversalTime() } } process { foreach ($User in $UserList) { try { $Param = @{ Identity = $User.Guid BatchName = $User.BatchName SuspendWhenReadyToComplete = $False Confirm = $False CompleteAfter = $LocalTime ErrorAction = 'Stop' } Set-MoveRequest @Param [PSCustomObject]@{ DisplayName = $User.DisplayName CompleteAfter = $LocalTime CompleteAfterUTC = $UTCTime Action = "SET" Result = "Success" Message = "" } } catch { [PSCustomObject]@{ DisplayName = $User.DisplayName CompleteAfter = $LocalTime CompleteAfterUTC = $UTCTime Action = "SET" Result = "Failed" Message = $_.Exception.Message } } try { Resume-MoveRequest $User.Guid [PSCustomObject]@{ DisplayName = $User.DisplayName CompleteAfter = "" CompleteAfterUTC = "" Action = "RESUME" Result = "Success" Message = "" } } catch { [PSCustomObject]@{ DisplayName = $User.DisplayName CompleteAfter = "" CompleteAfterUTC = "" Action = "RESUME" Result = "Failed" Message = $_.Exception.Message } } } } } |