Вызов скрипта Powershell из CMD с путями в качестве параметров - PullRequest
1 голос
/ 18 июня 2020

У меня возникли проблемы с тем, чтобы эта команда cmd запускала сценарий PowerShell, передав два параметра (пути).

C:\WINDOWS\System32>powershell -command \"C:\Apps\Scripts\Test\testing.ps1" \"\\Data1\dataholder$\office\J Smith\backup\" \"\\Data1\dataholder$\office\J Smith\backup2\"

Я получаю следующую ошибку:

At line:1 char:36
+ ... ps\Scripts\Test\testing.ps1 "\\Data1\dataholder$\office\ ...
+                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Unexpected token '\\Data1\dataholder$\office' in expression or statement.
At line:1 char:146
+ ... Smith\backup" "\\Data1\dataholder$\office\J Smith\backup2"
+                                                                         ~
The string is missing the terminator: ".
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken

Есть идеи, почему это не удается?

Мне пришлось изменить путь, ведущий к скрипту. Теперь команда выглядит так:

C:\WINDOWS\System32>powershell -command \"C:\Apps\Scripts\Power test\testing.ps1" \"\\Data1\dataholder$\office\J Smith\backup\" \"\\Data1\dataholder$\office\J Smith\backup2\"

Ошибка из-за пробела в пути скрипта, есть идеи, как с этим справиться?

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Вам нужно backsla sh escape-кавычки, которые вы хотите отправить из cmd-оболочки в PowerShell:

powershell -command "& \"C:\Apps\Scripts\Power test\testing.ps1\" \"\\Data1\dataholder$\office\J Smith\backup\" \"\\Data1\dataholder$\office\J Smith\backup2\""

Если в вашей программе или файле скрипта есть пробелы, вам нужно вызвать его с помощью вызова оператор (&) и включите его в свою строку, которая отправляется на -Command. Обратите внимание на двойные кавычки вокруг всего значения / строки, которое соответствует -Command.

Примечание: Внутренние двойные кавычки работают здесь, потому что $ заменяется \. Если у вас есть dataholder$folder в качестве примера, вам понадобятся одинарные кавычки или экранирование $, потому что PowerShell попытается интерпретировать $folder как переменную.

0 голосов
/ 19 июня 2020

Вот подход с обратным цитированием пробелов.

type "my script.ps1"

echo $args[0]


powershell .\my` script.ps1 hi` there

hi there

Или стратегия c размещение одинарных кавычек. Что-то может быть выполнено, если первый символ не является кавычкой. Цитата не работала до бэксла sh.

powershell .\'my script.ps1' 'hi there'

hi there
...