From 870887a577280e5fdd3c117f29d62cdafa111406 Mon Sep 17 00:00:00 2001 From: lksz Date: Fri, 16 Apr 2021 15:45:36 +0000 Subject: [PATCH] Progress improvements + Waiting with progress --- base/Show-Progress.ps1 | 3 ++- base/Wait-For.ps1 | 31 +++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 base/Wait-For.ps1 diff --git a/base/Show-Progress.ps1 b/base/Show-Progress.ps1 index 076f67a..163c869 100644 --- a/base/Show-Progress.ps1 +++ b/base/Show-Progress.ps1 @@ -32,8 +32,9 @@ if( $Completed ) { $progressParams.Completed = $true if( $Elapsed ) { if( -not $Status ) { - $progressParams.Status = "Running for $(ConvertFrom-TimeSpan $Elapsed)" + $progressParams.Status = "Running for #Elapsed#" } + $progressParams.Status = $progressParams.Status -replace '#Elapsed#',$(ConvertFrom-TimeSpan $Elapsed) if( $TotalSeconds ) { $progressParams.PercentComplete = [Math]::Floor($(1000 * (($Elapsed.TotalSeconds * 1.0) / ($TotalSeconds * 1.0)))/10.0) } diff --git a/base/Wait-For.ps1 b/base/Wait-For.ps1 new file mode 100644 index 0000000..5f19034 --- /dev/null +++ b/base/Wait-For.ps1 @@ -0,0 +1,31 @@ +[CmdletBinding()] param ( + [Parameter(Mandatory)] + [ScriptBlock]$WhileLogic, + [Parameter(Mandatory)] + [string]$Activity, + [string]$Status, + [int]$TotalSeconds, + [int]$StepDelaySeconds = 1, + [switch]$NoCompleteMessage, + [string]$CompleteMessage = "Run time", + [System.ConsoleColor]$ForegroundColor = [System.ConsoleColor]::Cyan, + [int]$MinSecondsDelayForCompleteMessage = 0 +) + +$local:progressParams = [ordered]@{ + Activity = $Activity +} +if( $Status ) { $progressParams.Status = $Status } +if( $TotalSeconds ) { $progressParams.TotalSeconds = $TotalSeconds} + +$local:sw = [System.Diagnostics.Stopwatch]::StartNew() +while( Invoke-Command -ScriptBlock $WhileLogic -ArgumentList @($sw) ) { + $progressParams.Elapsed = $sw.Elapsed + Show-Progress @progressParams + Start-Sleep -Seconds $StepDelaySeconds +} +Show-Progress -Activity $Activity -Completed + +if( -not $NoCompleteMessage -and ($MinSecondsDelayForCompleteMessage * 1000) -le $sw.ElapsedMilliseconds ) { + Write-Host -ForegroundColor $ForegroundColor "$CompleteMessage`: $(ConvertFrom-TimeSpan $sw.Elapsed)" +} \ No newline at end of file