Почему аргумент не вступает в силу? - PullRequest
0 голосов
/ 17 мая 2019

Предположим, у меня есть script1.ps1, который получает ответ REST от Vault, содержащий набор ключей / значений для Dev, Test, and Prod сред.

в script1, у меня есть параметр для передачи необязательного окружения.

param(
    [String]$environment
)

если в командной строке в качестве аргумента не передается среда, по умолчанию устанавливается значение dev

убедившись, что script1 извлекает значения, я проверил следующее (из моего сервера / среды разработки)

PS> script1.ps1

который вернул мне ключи / значения dev из хранилища ... хорошо

PS> script1.ps1 test

который вернул мне ключи / значения TEST из хранилища ... хорошо, так что скрипт работает просто отлично

Теперь рассмотрим script2.ps1, в котором я вызываю script1.ps1, чтобы изменить некоторые соединения в среде Dev.

это script2:

$response = & ".\script1.ps1" | ConvertFrom-Json
$response[1]

и запущенный скрипт2 ...

PS> script2.ps1

, который вернул мне ключи / значения dev из хранилища, потому что помните, что script1 по умолчанию устанавливает $environment в dev, если в противном случае не передается аргумент ... хорошо

Однако, когда я попробую это сейчас:

$response = & ".\script1.ps1 test" | ConvertFrom-Json
$response[1]

Я ничего не возвращаю!

почему это ??

Что-то не так с этим? & ".\script1.ps1 test"

1 Ответ

1 голос
/ 17 мая 2019

то, как вы использовали оператор вызова [&], не то, что рекомендуют документы.[ ухмылка ] они заключают в кавычки всю команду, затем пробел и ТОГДА аргументы.со страницы ss64 в операторе вызова ...

Syntax - & "[path] command" [arguments]

без отдельных кавычек он будет пытаться интерпретировать всю строку в кавычках как команду.

Итак, измените это ...

& ".\script1.ps1 test"

... на это ...

& ".\script1.ps1" "test"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...