Private/Helper/Confirm-TimeOfDay.ps1

<#
Copyright © 2024 Integris. For internal company use only. All rights reserved.
#>


FUNCTION Confirm-TimeOfDay {
    <#
    .SYNOPSIS
    Confirms if the current time falls within a specified time range.
 
    .DESCRIPTION
    This function checks if the current time, based on the specified time source (Windows, local, or GMT), falls within the provided start and end times.
 
    .PARAMETER UseWindowsTime
    Switch to use the current Windows system time.
 
    .PARAMETER UseLocalTime
    Switch to use the local time from a time information source.
 
    .PARAMETER UseGMTTime
    Switch to use the GMT time from a time information source.
 
    .PARAMETER StartTime
    The start time of the range to check.
 
    .PARAMETER EndTime
    The end time of the range to check.
 
    .EXAMPLE
    Confirm-TimeOfDay -UseWindowsTime -StartTime "08:00" -EndTime "17:00"
 
    .NOTES
    The function uses Get-Date or Get-TimeInfo to retrieve the current time and compares it with the specified time range.
    #>


    [CmdletBinding(DefaultParameterSetName='WindowsTime')]
    PARAM (
        [Parameter(Mandatory, ParameterSetName = 'WindowsTime')]
        [SWITCH]$UseWindowsTime,

        [Parameter(Mandatory, ParameterSetName = 'LocalTime')]
        [SWITCH]$UseLocalTime,

        [Parameter(Mandatory, ParameterSetName = 'GMTTime')]
        [SWITCH]$UseGMTTime,

        [Parameter(Mandatory, ParameterSetName = 'WindowsTime')]
        [Parameter(Mandatory, ParameterSetName = 'LocalTime')]
        [Parameter(Mandatory, ParameterSetName = 'GMTTime')]
        [DateTime]$StartTime,

        [Parameter(Mandatory, ParameterSetName = 'WindowsTime')]
        [Parameter(Mandatory, ParameterSetName = 'LocalTime')]
        [Parameter(Mandatory, ParameterSetName = 'GMTTime')]
        [DateTime]$EndTime
    )

    $TimeInfo = @()    
    $CurrentTime = ""

    IF ($UseWindowsTime -eq $True) { $CurrentTime = Get-Date }
    ELSEIF ($UseLocalTime -eq $True) {
        TRY { $TimeInfo = Get-TimeInfo }
        CATCH {
            TRY { $TimeInfo = Get-TimeInfo }
            CATCH { $TimeInfo = Get-TimeInfo }       
        }
    
        $CurrentTime = $TimeInfo.LocalTime 

        IF ($null -eq $CurrentTime -or $CurrentTime -eq "") { RETURN $False }
    }
    ELSEIF ($UseGMTTime -eq $True) {
        TRY { $TimeInfo = Get-TimeInfo }
        CATCH {
            TRY { $TimeInfo = Get-TimeInfo }
            CATCH { $TimeInfo = Get-TimeInfo }       
        }
        
        $CurrentTime = $TimeInfo.GMTTime 

        IF ($null -eq $CurrentTime -or $CurrentTime -eq "") { RETURN $False }
    }

    IF ($StartTime.TimeOfDay -lt $EndTime.TimeOfDay) {
        IF ( ($CurrentTime.TimeofDay -ge $StartTime.TimeOfDay) -and ($CurrentTime.TimeofDay -le $EndTime.TimeOfDay) ) {
            RETURN $True
        }
        ELSE { RETURN $False }
    }
    ELSE {
        IF ( ($CurrentTime.TimeofDay -ge $StartTime.TimeOfDay) -or ($CurrentTime.TimeofDay -le $EndTime.TimeOfDay) ) {
            RETURN $True
        }
        ELSE { RETURN $False }
    }

    RETURN $False
}