如何让Start-Job接受脚本参数?

时间:2015-12-03 22:02:20

标签: powershell parameters background-task start-job

我有一个PowerShell脚本可以执行多项操作,并且会接收延迟参数(以秒为单位的时间)。我想开始一个在延迟参数定义的时间后播放声音的后台作业。

因此用户输入如下内容:

.\RunMyScript -delay 10

在我的脚本中,我的param块看起来像这样:

param([int]$delay, [switch] $cleanup)

现在,$ delay参数在我的脚本中无处不在,但在使用Start-Job时它并不起作用。我尝试了以下两种方法,但都没有效果。

方法1

$PlayStartSound = {
        Start-Sleep -s $delay
        [System.Media.SystemSounds]::Beep.Play();
    }
Start-Job $PlayStartSound

APPROACH 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();}

我很好奇为什么$延迟不在范围内,以及我如何解决这个问题?谢谢你的期待。

1 个答案:

答案 0 :(得分:1)

想出来,答案是使用-ArgumentList参数来提供$ delay参数。希望这可以帮助将来的某个人。

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