Скобки или кавычки, нарушающие команду powershell

Я знаю, что это должно быть просто, но я не могу понять, как это сделать. У меня есть строка в переменной, которая читается через XML. Переменная называется $software, а ее значение - Java Flash Reader "Flash (IE)".

Затем он запускается из командной строки позже:

C:\Deployment\Ninite\NiniteOne.exe /select $xmlsoftware $installtype /remote file:"$NiniteTargets" $shortcuts $autoupdate /cachepath "$NiniteCache" $userinterface "$NiniteLog"

Команда прерывается, когда она попадает в раздел "Flash (IE)". Я думаю, что что-то происходит с скобками в этой переменной, но я не уверен. Любая помощь будет оценена.

2 ответа

Прежде всего: зачем делегировать cmd только для запуска программы? PowerShell также является оболочкой:

blabla.exe /select $software /silent

Но проблема немного сложнее, даже с осложнениями cmdСинтаксический разбор аргументов удален:

PS> $software = 'Java Flash Reader "Flash (IE)"'
PS> .\echoargs.exe /select $software /silent
arg 1: /select
arg 2: Java Flash Reader Flash
arg 3: (IE)
arg 4: /silent

Вы можете заменить кавычки в значении на \" чтобы заставить это работать, по-видимому:

PS> $software = $software -replace '"', '\"'
PS> .\echoargs.exe /select $software /silent
arg 1: /select
arg 2: Java Flash Reader "Flash (IE)"
arg 3: /silent

Попробуйте объявить $software как это:

$software = $('Java Flash Reader "Flash (IE)"')

Другой вариант - попытаться объявить так:

$software = "Java Flash Reader `"Flash `(IE`)`""

Добавление обратных тиков, чтобы избежать ( а также "

Другие вопросы по тегам