解释Powershell {} scriptblock中的变量

时间:2013-04-02 16:18:25

标签: powershell block

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

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

在之前的Question中,我发现我需要绝对的路径。但是,如果查看命令,则不解释$ 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"

1 个答案:

答案 0 :(得分: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"