我有一个执行多项任务的PowerShell脚本,并接受一个延迟参数(以秒为单位的时间)。我想启动一个后台作业,在由delay参数定义的时间之后播放声音。
因此,用户输入如下内容:
.\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方法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不在作用域内,以及我如何解决这个问题?谢谢你的关注。
发布于 2015-12-04 06:12:04
解决方法是使用-ArgumentList参数来提供$delay参数。希望这对将来的人有所帮助。
Start-Job –Scriptblock {Start-Sleep -s $args[0]; [System.Media.SystemSounds]::Beep.Play();} -ArgumentList $delayhttps://stackoverflow.com/questions/34077075
复制相似问题