如何让Start Job接受脚本参数



我有一个PowerShell脚本,它可以做很多事情,并接受一个延迟参数(时间以秒为单位)。我想开始一个后台工作,在延迟参数定义的时间后播放声音。

因此,用户输入类似以下内容:

.RunMyScript -delay 10

在我的脚本中,我的param块如下所示:

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

现在,$delay参数在我的脚本中无处不在,但当我使用StartJob时,它不起作用。我尝试了以下两种方法,但都不起作用。

方法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不在范围内,以及我如何解决这个问题?谢谢你的光临。

想清楚了,答案是使用-ArgumentList参数来提供$delay参数。希望这对将来的人有所帮助。

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

相关内容

  • 没有找到相关文章

最新更新