我有一个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"
答案 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"