Интерполяция переменных PowerShell в аргументах командной строки - PullRequest
0 голосов
/ 28 сентября 2018

Описание

У меня возникли проблемы с правильной передачей строки JSON в команду.Я считаю, что я воссоздал проблему, которую я испытываю в тесте.Строка JSON использует строки в двойных кавычках, которые также содержат двойные кавычки в теле строки.

Проблема:

Когда я вызываю скрипт Powershell напрямую с аргументами,скрипт корректно отображает строку JSON.Когда я вызываю сценарий PowerShell, используя powershell.exe, строка JSON, по-видимому, удаляется или анализируется таким образом, что удаляются двойные кавычки (что делает строку JSON недопустимой).

Примеры:

# Contents test.ps1 file
echo $args[0]
echo $args[1]

# Back to PowerShell
> $a='bar'
> $b="{`"foo`": `"$a`"}"
> $b
{"foo": "bar"} # <-- Looks correct

Когда я вызываю файл test.ps1 напрямую, выходные данные выглядят так, как я и ожидал:

> .\test.ps1 foo $b
foo
{"foo": "bar"} # <-- Looks correct

Однако, если я перейду на один уровень косвенности дальше ииспользовать powershell.exe для вызова команды, я не получаю желаемого результата:

> powershell.exe ".\test.ps1 foo $b"
foo
foo: bar # <-- Wrong... The curly brackets have been removed, as if it's been evaled.

> powershell.exe -command ".\test.ps1 foo $b"
foo
foo: bar # <-- Wrong... For the same reasons as the last example

Я пытаюсь определить, как я могу получить команду powershell.exe для вывода полной строки JSON с кавычками.

1 Ответ

0 голосов
/ 28 сентября 2018

Когда вы передаете powershell.exe строку, она вызывает ее как выражение.

powershell.exe "Get-Date"

Вот почему PowerShell вызывает вашу строку.

Вы можете решить эту проблему следующим образом:

$a='bar'
$b="{`"foo`": `"$a`"}"
powershell.exe -command {.\test.ps1 'foo' $args[0]} -args $b
...