Private/Get-MaintenanceWindow.ps1

function Get-MaintenanceWindow {
    param (
        # UTC
        [Parameter()]
        [bool]
        $UTC,
        # StartTime
        [Parameter(Mandatory = $True)]
        [datetime]
        $StartTime,
        # EndTime
        [Parameter(Mandatory = $True)]
        [datetime]
        $EndTime,
        # Effective Date Time
        [Parameter(Mandatory = $False)]
        [datetime]
        $EffectiveDateTime
    )
    $Date = Get-Date
    Write-Verbose "Current Date: $Date"
    if ($UTC -eq $True) {
        $Date = $Date.ToUniversalTime()
        Write-Verbose "Converted Time to UTC"
        Write-Verbose "Current Date: $Date"
    }
    #Offset Times if TimeSpan crosses 00:00
    if ($StartTime.TimeOfDay -gt $EndTime.TimeOfDay) {
        $OffSet = 24 - $StartTime.TimeOfDay.TotalHours
        $AltDate = $Date.TimeOfDay.TotalHours + $OffSet
        if ($AltDate -gt 24) {
            $AltDate = $AltDate - 24
        }
        $AltStartTime = [int]0.0
        $AltEndTime = $EndTime.TimeOfDay.TotalHours + $OffSet
        $Global:MaintenanceWindowActive = $AltDate -ge $AltStartTime -and $AltDate -le $AltEndTime
        Write-Verbose "Start Time is Greater Than EndTime"
        Write-Verbose "Offset: $OffSet"
        Write-Verbose "AltDateHours: $AltDate"
        Write-Verbose "AltStartTimeHours: $AltStartTime"
        Write-Verbose "AltEndTimHours: $AltEndTime"
    }
    if (($StartTime.TimeOfDay -lt $EndTime.TimeOfDay)) {
        $Global:MaintenanceWindowActive = $Date.TimeOfDay.TotalHours -ge $StartTime.TimeOfDay.TotalHours -and $Date.TimeOfDay.TotalHours -le $EndTime.TimeOfDay.TotalHours
        Write-Verbose "Start Time is Less Than EndTime"
    }
    #Determine if maintenance window is active yet, default to false if not active
    if ($Date -lt $EffectiveDateTime) {
        $Global:MaintenanceWindowEnabled = $False
        $Global:MaintenanceWindowActive = $False
        Write-Verbose "MaintenanceWindowEnabled False - Date is less than Effective Date Time"
    }
    else {
        $Global:MaintenanceWindowEnabled = $True
        Write-Verbose "MaintenanceWindowEnabled True - Date is greater than Effective Date Time"

    }
    if ($Global:TSEnv) {
        $Global:MaintenanceWindowEnabled = $True
        $Global:MaintenanceWindowActive = $True
        Write-Verbose 'Task Sequence Environment True - Overriding Maintenance Window'
    }

    if ($Global:OverrideMaintenanceWindow) {
        $Global:MaintenanceWindowEnabled = $True
        $Global:MaintenanceWindowActive = $True
        Write-Verbose 'Global OverrideMaintenanceWindow Flag Enabled - Overriding Maintenance Window'
    }
    
    Write-Verbose "DateTimeofDay: $($Date.TimeOfDay)"
    Write-Verbose "StartTimeTimeOfDay: $($StartTime.TimeOfDay)"
    Write-Verbose "EndTimeTimeOfDay: $($EndTime.TimeOfDay)"
    Write-Verbose "EffectiveDateTime: $EffectiveDateTime"
    Write-Verbose "MaintenanceWindowEnabled: $Global:MaintenanceWindowEnabled"
    Write-Verbose "MaintenanceWindowActive: $Global:MaintenanceWindowActive"

    return [PSCustomObject]@{
        MaintenanceWindowEnabled = $Global:MaintenanceWindowEnabled
        MaintenanceWindowActive  = $Global:MaintenanceWindowActive
    }
}