我的脚本存储了一堆来自应用程序的外部应用程序命令
$ app1 = get-command“C:\ Where \ Command \ located.exe”
然后我用
来调用它&安培; $ app1 -S -P 9000
(其中-S -P和9000是我在cmd.exe shell中传递它们的参数)。到这里一切都很完美。但是,我想将此作为后台任务运行,这就是我遇到麻烦的地方。
Start-Job -ScriptBlock {& $ app1 -S -P 9000}
以“&”之后的“表达式”失败在一个管道元素中产生了一个无效的对象。“我搜索谷歌大约两天,我尝试过的一切似乎都是徒劳的。在@()中包含参数并尝试将它们展开,调用表达式,调用命令,调用项目(仍然不清楚这些都在做什么)。我也尝试将整个命令转换为字符串,然后在启动作业中调用Invoke-Expression,但它似乎也没有工作。因此,这个问题是了解所有这些事情何时适合使用以及为什么在我将其传递给后台工作后不能正常工作的资源。
答案 0 :(得分:1)
尝试将$app1
变量传递给脚本块:
Start-Job -ScriptBlock {param($app1) & $app1 -S -P 9000 } -ArgumentList $app1
请注意,而不是
$app1 = get-command "C:\Where\Command\Located.exe"
你也可以
$app1 = "C:\Where\Command\Located.exe"