Powershell:Backgrounding命令导致它无法工作

Powershell:Backgrounding命令导致它无法工作,powershell,background,command,external,Powershell,Background,Command,External,我的脚本存储了一堆来自这样一个应用程序的外部应用程序命令 $app1=获取命令“C:\Where\command\Located.exe” 那我就叫它 &$app1-S-p 9000 (其中-S-p和9000是参数,我将在cmd.exe shell中传递它们)。到目前为止,一切都很顺利。但是,我想将此作为后台任务运行,这就是我开始遇到麻烦的地方 开始作业-脚本块{&$app1-S-p9000} “管道元素中“&”之后的表达式生成了一个无效对象”失败。我在谷歌搜索了大约两天,我尝试的一切似乎都是徒

我的脚本存储了一堆来自这样一个应用程序的外部应用程序命令

$app1=获取命令“C:\Where\command\Located.exe”

那我就叫它

&$app1-S-p 9000

(其中-S-p和9000是参数,我将在cmd.exe shell中传递它们)。到目前为止,一切都很顺利。但是,我想将此作为后台任务运行,这就是我开始遇到麻烦的地方

开始作业-脚本块{&$app1-S-p9000}


“管道元素中“&”之后的表达式生成了一个无效对象”失败。我在谷歌搜索了大约两天,我尝试的一切似乎都是徒劳的。将参数封装在@()中,并尝试将其展开、调用表达式、调用命令、调用项(对于这些都在做什么还不清楚)。我还尝试将整个命令转换为字符串,然后在开始作业中调用Invoke表达式,但它似乎也不起作用。因此,这个问题需要了解何时所有这些东西都适合使用,以及为什么在我将其传递到后台作业时它不起作用。

尝试将
$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"

尝试将
$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"

谢谢,效果很好!您建议通过字符串而不是通过get command对象传递外部命令的位置吗?@clanahan-当您有路径并且可以使用该路径运行命令时,只使用该路径而不是get命令并正确使用该命令是有意义的?不是100%确定,但我不认为Get命令是用于这种用途的。啊,我不确定,因为我认为对象更可取。这根绳子很好用。谢谢,效果很好!您建议通过字符串而不是通过get command对象传递外部命令的位置吗?@clanahan-当您有路径并且可以使用该路径运行命令时,只使用该路径而不是get命令并正确使用该命令是有意义的?不是100%确定,但我不认为Get命令是用于这种用途的。啊,我不确定,因为我认为对象更可取。这根绳子更管用。