ScriptBlock在PowerShell中不执行

时间:2013-07-30 19:51:29

标签: .net powershell

我正在尝试使用.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做错了什么?

1 个答案:

答案 0 :(得分:1)

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

为了让我的scriptblock工作,我做了:

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

    & $myExe
} -ArgumentList @($myExe)