functions/Import-MyTimer.ps1

Function Import-MyTimer {
    [CmdletBinding(SupportsShouldProcess)]
    [OutputType('MyTimer')]
    Param(
        [Parameter(
            Position = 0,
            Mandatory,
            HelpMessage = 'Enter the name and path of an XML file'
        )]
        [ValidateNotNullOrEmpty()]
        [ValidateScript( {
            if (Test-Path $_) {
                $True
            }
            else {
                Throw "Cannot validate path $_"
            }
        })]
        [String]$Path
    )

    Write-Verbose "Starting: $($MyInvocation.MyCommand)"
    Write-Verbose "Using PSBoundParameters: `n $(New-Object PSObject -Property $PSBoundParameters | Out-String)"

    $Imports = Import-Clixml -Path $Path
    Write-Verbose "Importing $($Imports.count) timer(s)"
    foreach ($Import in $Imports) {
        Write-Verbose "Importing $($Import.name)"
        $import | Select-Object * | Out-String | Write-Verbose
        $in = [MyTimer]::New()
        $in.Name = $Import.Name
        $in.Start = $Import.Start
        $in.End = $Import.End
        $in.Duration = $Import.Duration
        $in.Running = $Import.Running
        $in.Description = $Import.Description
        $in.ImportedDuration = $Import.Duration
        #previous exports might not have this property
        if ($Import.Status -ge 0) {
            Write-Verbose "Setting status to $($import.status)"
            $in.Status = $Import.Status
        }
        if ($PSCmdlet.ShouldProcess($Import.name)) {
            Write-Verbose 'Creating:'
            $in | Select-Object -Property * | Out-String | Write-Verbose

            Try {
                [void](Get-Variable MyTimerCollection -Scope global -ErrorAction Stop)
            }
            Catch {
                New-Variable -Scope global -Name MyTimerCollection -Value @{}
            }
            #reuse existing timers if found
            if ($global:MyTimerCollection.ContainsKey($In.name)) {
                $global:MyTimerCollection[$in.name] = $in
            }
            else {
                $global:MyTimerCollection.add($in.name, $in)
            }
            #Recreate the stopwatch
            If (-Not $global:MyWatchCollection) {
                $global:MyWatchCollection = @{}
            }
            $global:MyWatchCollection[$in.Name] = [System.Diagnostics.Stopwatch]::New()
            If ($In.Status -eq 'Running') {
                $in.StartTimer()
            }
            Get-MyTimer $in.Name
        } #WhatIf
    }

    Write-Verbose "Ending: $($MyInvocation.MyCommand)"
}