我有一个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