Как передать параметр строки в Powershell для ConvertFrom-StringData из командной строки? - PullRequest
4 голосов
/ 26 ноября 2010

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

Файл скрипта выглядит так:

param( [string]$paramString )

$params = ConvertFrom-StringData $paramString
$params

Запуск сценария непосредственно в powershell дает ожидаемый результат:

[PS] C:\some\path>.\test.ps1 "a=foo `n b=bar `n c=moo"

Name                           Value
----                           -----
c                              moo
a                              foo
b                              bar

Вызов powershell из командной строки с тем же сценарием и параметрами показывает это:

C:\some\path>powershell -nologo -file ./test.ps1 "a=foo `n b=bar `n c=moo"

Name                           Value
----                           -----
a                              foo `n b=bar `n c=moo

Кажется, что переданная строка имеет какой-то формат, поэтому функция ConvertFrom-StringData больше не может ее анализировать.

Ответы [ 2 ]

3 голосов
/ 26 ноября 2010

Подход с -File проблематичен, потому что параметр не оценивается cmd (у него в PowerShell) и эквиваленты новых строк не раскрываются, они передаются буквально.

Проблема может быть решенаесли мы все еще позволяем PowerShell делать это, используя вместо этого -Command:

powershell -nologo -command "./test.ps1 ""a=foo `n b=bar `n c=moo"""

Это ужасно: нам нужно удваивать каждый внутренний " в команде.Но это работает.(Команда может быть определена несколькими параметрами; я просто предпочитаю использовать один параметр: для меня этот способ выглядит проще).

0 голосов
/ 30 ноября 2010

Используйте одинарную кавычку для передачи параметров в powershell с помощью скрипта, подобного этому:

C:\some\path>powershell .\test.ps1 'a=foo' 'b=bar' 'c=moo'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...