Вы можете использовать реальный таймер:
$timer = New-Object -Type Timers.Timer
$timer.Interval = 3000 #3 seconds
$job = Register-ObjectEvent -InputObject $Timer -EventName Elapsed -SourceIdentifier TimerEvent -Action {Write-Host "[$(Get-Date)] Coucou!" } -MaxTriggerCount 5
# Start the timer
$timer.Start()
# Stop your code
Wait-Job $job -Timeout 16
#Stop the timer
$timer.Stop()
# When You completely finished with this, you have to cleanup by unregistering the event handler and remove the PSJob.
Get-EventSubscriber | Unregister-Event
Get-Job | Remove-Job
-MaxTriggerCount 5
- это эквивалент вашего $counter
.
Wait-Job $ job -Timeout 16, если вы не хочу ничего делать за истекшее время.
Когда вы полностью закончили с этим, вы должны очиститься, отменив регистрацию обработчика событий и удалив PSJob.
Get-EventSubscriber | Unregister-Event
Get-Job | Remove-Job