Start-CountdownTimerJob.ps1


<#PSScriptInfo
 
.VERSION 1.0
 
.GUID d60c3aeb-ffaa-4e56-8ff3-c2f080d06992
 
.AUTHOR Tigran TIKSN Thorosyan
 
.COMPANYNAME
 
.COPYRIGHT
 
.TAGS
 
.LICENSEURI
 
.PROJECTURI
 
.ICONURI
 
.EXTERNALMODULEDEPENDENCIES
 
.REQUIREDSCRIPTS
 
.EXTERNALSCRIPTDEPENDENCIES
 
.RELEASENOTES
 
 
.PRIVATEDATA
 
#>


#Requires -Module BurntToast

<#
 
.DESCRIPTION
 Countdown Timer
 
#>
 
[CmdletBinding()]
param (
    [Parameter(Mandatory = $true)]
    [int]
    $Minutes,
    [Parameter()]
    [switch]
    $Wait
)

$job = Start-Job -Name 'Countdown Timer' -ScriptBlock {
    param (
        $Minutes
    )

    $duration = New-TimeSpan -Minutes $Minutes

    $startTime = Get-Date
    $endTime = $startTime.Add($duration)

    do {
        $remainingTime = $endTime.Subtract((Get-Date))
        $remainingTime = New-TimeSpan -Seconds ([math]::Round($remainingTime.TotalSeconds))

        if ($remainingTime -le [timespan]::Zero) {
            break
        }

        Write-Host ($remainingTime.ToString('g'))
        Start-Sleep -Seconds 1
    } until ($remainingTime -le [timespan]::Zero)

    New-BurntToastNotification -Text "Countdown Timer for $Minutes minutes ended." -UniqueIdentifier (New-Guid)
} -ArgumentList $Minutes 

if ($Wait) {
    $job | Receive-Job -Wait
}