Powershell удаляет кавычки при запуске процесса

Посмотрите на код ниже

$SBK="0x1682CCD8 0x8A1A43EA 0xA532EEB6 0xECFE1D98"
./windows/nvflash/nvflash.exe --sbk 0x1682CCD8 0x8A1A43EA 0xA532EEB6 0xECFE1D98
./windows/nvflash/nvflash.exe --sbk "0x1682CCD8 0x8A1A43EA 0xA532EEB6 0xECFE1D98"
./windows/nvflash/nvflash.exe --sbk $SBK

Я определяю строку var $SBK, а затем я передам ее для некоторого приложения. Первый вызов процесса работает правильно. Второй не удается, поэтому приложение не принимает кавычки. Но третий вызов тоже не с той же ошибкой. Кажется, что powershell передает кавычки, которые вызывают ошибки. Но как их устранить? Спасибо заранее.

Ответ 1

Попробуйте сделать

iex "./windows/nvflash/nvflash.exe --sbk $SBK"

Кроме того, получите echoargs.exe из Расширение сообщества PowerShell, чтобы узнать, как аргументы передаются из Powershell в команды и т.д.

Ответ 2

Вероятно, вы не должны использовать Invoke-Expression (см. Это сообщение из команды PowerShell)

Вместо этого вы можете создать массив аргументов, а затем передать их с помощью оператора вызова. Подробнее см. этот пост моей темы.

В вашем случае это выглядит примерно так:

$SBKArgs="--sbk", "0x1682CCD8", "0x8A1A43EA", "0xA532EEB6", "0xECFE1D98"
$cmd = Get-Command ./windows/nvflash/nvflash.exe 
& $cmd $sbkargs

Надеюсь, что это поможет