Скобки или кавычки, нарушающие команду 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`)`""
Добавление обратных тиков, чтобы избежать (
а также "