2

バックグラウンドで .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 に答える