1

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

所以用户输入如下内容:

.\RunMyScript -delay 10

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

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 不在范围内,我该如何解决这个问题?感谢您的关注。

4

1 回答 1

1

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

Start-Job –Scriptblock {Start-Sleep -s $args[0]; [System.Media.SystemSounds]::Beep.Play();} -ArgumentList $delay
于 2015-12-03T22:12:03.867 回答