1

我正在尝试通过执行以下操作来执行.exe文件PowerShell

$myExe = Join-Path $scriptDir "\bin\my\myProgram.exe" 
 $job = Start-Job -ScriptBlock{ 
        & $myExe }

但它不执行。当在文件路径中键入时$myExe,程序按预期工作,但是当我使用上面的代码时,什么也没有发生。有人可以解释我做错了什么吗?或者,为什么我没有得到预期的结果?

需要明确的是,预期结果(此时)是获得防火墙警告。同样,当我直接输入 PS 控制台的路径时,会出现防火墙警告,但使用上面的代码,似乎什么也没发生。我也尝试使用检查状态,Get-Process但结果是$job变量,说它是running.

更新:

跑步:

$myExe = Join-Path $scriptDir "\bin\my\myProgram.exe"
& $prndExe

导致 PowerShell 挂起

更新 2:

当我执行以下操作时,程序运行并且进程开始:

 Start-Job -ScriptBlock{ & "C:\path\Music\source\p\android\test\Automation\bin\mym\myProgram.exe"}

但是使用上面的代码不会。Start-Job这让我相信我在cmdlet上做错了什么?

4

1 回答 1

1

所以这个问题的解决方案(文档中没有列出,应该是)是,如果你在里面使用变量,ScriptBlock你必须使用ArgumentList并传入这些变量。

所以为了让我的脚本块工作,我做了:

$job = Start-Job -ScriptBlock{  
    $myExe = $args[0]

    & $myExe
} -ArgumentList @($myExe)
于 2013-07-30T21:38:59.543 回答