首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让Start-Job接受脚本参数?

如何让Start-Job接受脚本参数?
EN

Stack Overflow用户
提问于 2015-12-04 06:02:20
回答 1查看 322关注 0票数 1

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

因此,用户输入如下内容:

代码语言:javascript
复制
.\RunMyScript -delay 10

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

代码语言:javascript
复制
param([int]$delay, [switch] $cleanup)

现在,$delay参数在我的脚本中到处都可以用,但是当我使用Start-Job时它就不起作用了。我尝试了以下两种方法,但都不起作用。

方法1

代码语言:javascript
复制
$PlayStartSound = {
        Start-Sleep -s $delay
        [System.Media.SystemSounds]::Beep.Play();
    }
Start-Job $PlayStartSound

方法2

代码语言:javascript
复制
Start-Job –Scriptblock {Start-Sleep -s $delay; [System.Media.SystemSounds]::Beep.Play();}

这两种方法都会立即播放声音,而忽略延迟。如果我将$delay替换为一个数字,如下所示,那么它可以工作:

代码语言:javascript
复制
Start-Job –Scriptblock {Start-Sleep -s 10; [System.Media.SystemSounds]::Beep.Play();}

我很好奇为什么$delay不在作用域内,以及我如何解决这个问题?谢谢你的关注。

EN

回答 1

Stack Overflow用户

发布于 2015-12-04 06:12:04

解决方法是使用-ArgumentList参数来提供$delay参数。希望这对将来的人有所帮助。

代码语言:javascript
复制
Start-Job –Scriptblock {Start-Sleep -s $args[0]; [System.Media.SystemSounds]::Beep.Play();} -ArgumentList $delay
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34077075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档