@Time.ps1

<#
.Synopsis
    Sends an event at a specific time.
.Description
    Sends an event at a specific date and time.
.Example
    On Time "5:00 PM" { "EOD!" | Out-Host }
#>

[Diagnostics.Tracing.EventSource(Name='Elapsed')]
param(
[Parameter(Mandatory,Position=0,ParameterSetName='SpecificTime')]
[DateTime]
$DateTime
)

process {
    if ($DateTime -lt [DateTime]::Now) {
        Write-Error "-DateTime '$DateTime' must be in the future"
        return
    }

    $timer =
        New-Object Timers.Timer -Property @{Interval=($DateTime - [DateTime]::Now).TotalMilliseconds;AutoReset=$false}

    if (-not $timer) { return }
    $timer.Start()
    return $timer
}