我有一个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();}
我很好奇为什么$延迟不在范围内,以及我如何解决这个问题?谢谢你的期待。
答案 0 :(得分:1)
想出来,答案是使用-ArgumentList参数来提供$ delay参数。希望这可以帮助将来的某个人。
Start-Job –Scriptblock {Start-Sleep -s $args[0]; [System.Media.SystemSounds]::Beep.Play();} -ArgumentList $delay