Как заставить Start-Job принимать параметры скрипта?

У меня есть сценарий 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 не входит в область действия и как я могу это исправить? Спасибо, что посмотрели.


person Freakishly    schedule 03.12.2015    source источник


Ответы (1)


Выяснилось, что ответ заключается в использовании параметра -ArgumentList для указания параметра $delay. Надеюсь, это поможет кому-то в будущем.

Start-Job –Scriptblock {Start-Sleep -s $args[0]; [System.Media.SystemSounds]::Beep.Play();} -ArgumentList $delay
person Freakishly    schedule 03.12.2015