Скобки или кавычки, нарушающие команду 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)". Я думаю, что что-то происходит с скобками, находящимися в этой переменной, но я не уверен. Любая помощь будет оценена.

Ответ 1

Прежде всего: зачем делегировать 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

Ответ 2

Попробуйте объявить $software следующим образом:

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

Другой вариант - попробовать:

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

Добавление обратных тиков для выхода из ( и "