У меня есть сценарий PowerShell, который выполняет несколько действий и принимает параметр задержки (время в секундах). Я хочу запустить фоновое задание, которое воспроизводит звук через время, определенное параметром задержки.
Итак, пользователь вводит что-то вроде:
.\RunMyScript -delay 10
В моем скрипте мой блок параметров выглядит так:
param([int]$delay, [switch] $cleanup)
Теперь параметр $delay работает везде в моем скрипте, но не работает, когда я использую Start-Job. Я пробовал оба следующих подхода, и ни один из них не работал.
ПОДХОД 1
$PlayStartSound = {
Start-Sleep -s $delay
[System.Media.SystemSounds]::Beep.Play();
}
Start-Job $PlayStartSound
ПОДХОД 2
Start-Job –Scriptblock {Start-Sleep -s $delay; [System.Media.SystemSounds]::Beep.Play();}
Оба подхода воспроизводят звук немедленно, игнорируя задержку. Если я заменю $delay числом, скажем так, тогда это сработает:
Start-Job –Scriptblock {Start-Sleep -s 10; [System.Media.SystemSounds]::Beep.Play();}
Мне любопытно, почему $delay не входит в область действия и как я могу это исправить? Спасибо, что посмотрели.