2013-04-02 3 views
2

У меня есть скрипт, который должен начать EXE-файл в фоновом режиме:Интерпретируйте переменной в Powershell {} ScriptBlock

$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

В '$ block' переменная' $ strPath' пуста, поскольку скриптовый блок - это совершенно новый скрипт. Ваш скриптовый блок должен принимать аргументы. О да, [Не используйте венгерскую нотацию] (http://windowsitpro.com/blog/what-do-not-do-powershell-part-5). Не огромная сделка, но практика делает совершенным. –

ответ

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" 
+0

Я использовал этот http://blogs.technet.com/b/heyscriptingguy/archive/2013/05/22/variable-substitution-in-a-powershell-script-block.aspx, но мне нравится ваше решение лучше. Благодарю. –

+0

Вам не хватает столбца в вашем ответе? –

Смежные вопросы