Используйте bat для запуска скрипта Powershell - PullRequest
5 голосов
/ 26 ноября 2009

У меня есть командный файл test.bat для запуска сценария powershell:

@pushd "C:\myscripts"
powershell .\test.ps1 arg1 "arg2 with space" arg3
@popd

Скрипт test.ps1 (находится в C: \ myscripts) очень прост, например:

# just print out the arguments
Write-Output ("args count: {0}" -f $args.length)
$args

Затем я попытался запустить test.bat. Я должен получить три аргумента, передаваемых PS1, но я получил следующий результат:

Количество аргументов: 5 arg1 арг2 с пространство arg3

То, что я ожидал в скрипте, args [0] должно быть arg1, а args [1] должно быть «arg2 with space», а args3 [2] должно быть arg3. Я не могу понять, почему скрипт на самом деле получает 5 аргументов.

Как передать параметры из cmd или batch в powershell так, как я ожидал? Как это:

args count: 3
arg1
arg2 with space
arg3

Ответы [ 2 ]

7 голосов
/ 26 ноября 2009
powershell .\test.ps1 arg1 'arg2 with space' arg3

или

powershell .\test.ps1 arg1 """arg2 with space""" arg3

Я думаю, вам следует избегать использования двойных кавычек, поскольку cmd уже использует их, и поэтому немного сложно предсказать, что именно получит PowerShell. Помните, что это проходит через две оболочки и, следовательно, два уровня экранирования / цитирования.

PowerShell сама по себе не делает большого различия между одинарными и двойными кавычками. По крайней мере, в этом контексте разница не имеет значения.

0 голосов
/ 26 ноября 2009

OK. Я думаю, я понял:

@pushd "C:\myscripts"
powershell .\test.ps1 arg1 'arg2 with space' arg3
@popd

символ одинарной кавычки вместо двойного. Может быть, они имеют в виду разные вещи в PS.

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