2

我有一个 shell 脚本,它应该在后台启动一个 .exe:

$strPath = get-location
$block = {& $strPath"\storage\bin\storage.exe" $args}
start-job -scriptblock $block -argumentlist "-f", $strPath"\storage\conf\storage.conf"

在前面的问题中,我发现我需要绝对路径。但是,如果您查看命令,则不会解释 $strPath 变量:

PS Q:\mles\etl-i_test> .\iprog.ps1 --start1
Start Storage

Id              Name            State      HasMoreData     Location             Command
--              ----            -----      -----------     --------             -------
37              Job37           Running    True            localhost            & $strPath"\storage\bi...

我怎样才能解决这个问题?

编辑:我知道我需要将路径作为参数传递,如何传递?就像是:

$block = {& $args[0]"\storage\bin\storage.exe" $args[1] $args[2]}
start-job -scriptblock $block -argumentlist $strPath, "-f", $strPath"\storage\conf\storage.conf"

?

4

1 回答 1

4

脚本块的内容将在另一个无法访问您的变量的 PowerShell.exe 实例(作为作业)中执行。这就是为什么您需要将它们发送到Start-Job参数列表中。发送作业需要用作参数的所有数据。storage.exe 的完整路径,例如

$path = (Get-Location).Path
$block = {& $args[0] $args[1] $args[2]}

start-job -scriptblock $block -argumentlist `
    "$path\storage\bin\storage.exe" `
    "-f", `
    "$path\storage\conf\storage.conf"
于 2013-04-02T16:33:19.693 回答