en-US/about_PSTimers.help.txt

TOPIC
    about_pstimers
 
SHORT DESCRIPTION
    This module contains a set of PowerShell functions to be used as timers and
    countdown tools.
 
    - Export-MyTimer
    - Get-HistoryRuntime
    - Get-MyTimer
    - Import-MyTimer
    - Remove-MyTimer
    - Set-MyTimer
    - Start-MyTimer
    - Start-PSCountdown
    - Start-PSCountdownTimer
    - Stop-PSCountdownTimer
    - Start-PSTimer
    - Stop-MyTimer
 
    The commands should also work on PowerShell 7 cross-platform, although there
    may be a few artifacts on non-Windows systems. It is recommended that you
    run PowerShell 7.2 or later on non-Windows systems.
 
LONG DESCRIPTION
 
    MYTIMER
    This module incorporates commands from a previous module to create simple
    timer objects. The MyTimer object is defined in a private PowerShell class.
 
    TypeName: MyTimer
 
    Name MemberType Definition
    ---- ---------- ----------
    Equals Method bool Equals(System.Object obj)
    GetHashCode Method int GetHashCode()
    GetStatus Method timespan GetStatus()
    GetType Method type GetType()
    StopTimer Method void StopTimer()
    ToString Method string ToString()
    Description Property string Description {get;set;}
    Duration Property timespan Duration {get;set;}
    End Property datetime End {get;set;}
    Name Property string Name {get;set;}
    Running Property bool Running {get;set;}
    Start Property datetime Start {get;set;}
    History PropertySet History {Name, Start, End, Duration, Description}
 
    You can create a new timer from the prompt.
 
    PS C:\> Start-MyTimer revisions -Description "module updates"
 
    Name Start Stop Duration Running Description
    ---- ----- ---- -------- ------- -----------
    revisions 3/2/2023 3:13:23 PM 00:00:00 True module updates
 
    You can start as many timers as you need.
 
    PS C:\> $a = Start-Mytimer a -Description email
    PS C:\> $b = Start-MyTimer
 
    Use `Get-MyTimer` to view.
 
    PS C:\> Get-MyTimer
 
    Name Start Stop Duration Running Description
    ---- ----- ---- -------- ------- -----------
    MyTimer 3/2/2023 2:57:29 PM 00:19:53.2590571 True
    revisions 3/2/2023 3:13:23 PM 00:03:58.9337823 True module updates
    a 3/2/2023 3:15:26 PM 00:01:55.9419730 True email
 
    When you are finished, you can stop the timer.
 
    PS C:\> Stop-MyTimer revisions
 
    Name : revisions
    Start : 3/2/2023 3:13:23 PM
    End : 3/2/2023 3:18:15 PM
    Duration : 00:04:52.3328308
    Description : module updates
 
    The timer will exist for the duration of your PowerShell session.
 
    PS C:\> Get-MyTimer revisions
 
    Name Start Stop Duration Running Description
    ---- ----- ---- -------- ------- -----------
    revisions 3/2/2023 3:13:23 PM 3/2/2023 3:18:15 PM 00:04:52.3328308 False module updates
 
    Although there are provisions for exporting and importing timers.
 
Start-PSCountdown
    The `Start-PSCountdown` command uses `Write-Progress` to display countdown
    information. PowerShell 7.2 uses a minimized progress display and a
    different set of color options based on `$PSStyle`.
    If you would like to use the legacy progress display in PowerShell 7, you
    should configure it before running `Start-PSCountdown`.
 
    $PSStyle.View = "Classic"
 
    Set it to `Minimal` to restore.
    `Start-PSCountdown` will automatically detect `$PSStyle` and adjust colors
    accordingly. It is recommended that you use PowerShell 7.2 or later.
 
PSCountdownTimer
    An alternative to `Start-PSCountdown` is
    `Start-PSCountdownTimer`
    .
 
    Start-PSCountdownTimer -seconds 600 -message "The PowerShell magic begins in " -FontSize 64 -Color SpringGreen -OnTop
 
    This is a transparent WPF form that displays a countdown timer and an
    optional message. You can control it by changing values in the
    `$PSCountdownClock` synchronized hashtable.
 
    PS C:\> $PSCountdownClock
 
    Name Value
    ---- -----
    StartingPosition
    Running True
    Seconds 600
    Color SpringGreen
    FontWeight Normal
    FontFamily Segoi UI
    CurrentPosition {1334, 532}
    OnTop True
    Runspace System.Management.Automation.Runspaces.LocalRunspace
    Message The PowerShell magic begins in
    FontStyle Normal
    Started 10/14/2022 4:21:13 PM
    FontSize 64
    AlertColor Yellow
    WarningColor Red
    Alert 50
    Warning 30
 
    PS C:\> $PSCountdownClock.OnTop = $False
 
    At 50 seconds the color will change to yellow and then to red at 30 seconds.
    You can stop the clock by right-clicking on the form, setting the `Running`
    hashtable value to `$False`, or running `Stop-PSCountdownTimer`. This is the
    recommended way. The WPF countdown runs in a separate runspace. If you close
    the PowerShell session where you started the countdown, the timer will terminate.
    Because the timer runs in a separate runspace, the timer itself cannot
    initiate an action at the end of the timer. If you would like to create
    automation around the countdown timer, you could create a PowerShell script
    like this.
 
    $splat = @{
            Seconds = 60
            Message = "The PowerShell magic begins in "
            FontSize = 64
            Color = "SpringGreen"
        }
        Start-PSCountdownTimer @splat
 
    Do {
        Start-Sleep -Seconds 1
    } While ($PSCountdownClock.Running)
    Clear-Host
    Write-Host "Are you ready for some PowerShell?" -ForegroundColor magenta -BackgroundColor gray
 
    #play a startup song
    Add-Type -AssemblyName PresentationCore
    $filename = "c:\work\01-Start.mp3"
 
    $global:MediaPlayer = New-Object System.Windows.Media.MediaPlayer
    $global:MediaPlayer.Open($filename)
    $global:MediaPlayer.Play()
 
    The media player launches with no UI. Use the object's methods to control
    it.
 
    $MediaPlayer.stop()
    $MediaPlayer.close()
 
KEYWORDS
    - Timer
    - Timespan