@pfsenses

Powershell — экранирование спецсимволов?

Не получается записать в значение реестра следующую строку:
powershell.exe –NoExit \"-Command\" \"if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1'\"

В текущем виде экранированно почти все:
New-ItemProperty -LiteralPath HKCR:\Microsoft.PowerShellScript.1\Shell\runas\command -Name 'Default' -Value 'powershell.exe –NoExit "-Command" "if((Get-ExecutionPolicy ) -ne ''AllSigned'') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1'\"' -PropertyType String -Force | Out-Null; `

Проблемы вызывает часть кода, начинающаяся с %1. При попытке выполнить командлет, появляется следующая ошибка:
New-ItemProperty : A positional parameter cannot be found that accepts argument '%1\"''.
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
@MaxKozlov
Честно говоря, живьём не пробовал, но, скорее всего нужно что-то типа того.
Обратите ещё внимание, что Default в круглых скобках, а вокруг -Command кавычки не нужны

New-ItemProperty -LiteralPath HKCR:\Microsoft.PowerShellScript.1\Shell\runas\command -Name '(Default)' -Value 'powershell.exe -NoExit -Command "if((Get-ExecutionPolicy ) -ne ''AllSigned'') { Set-ExecutionPolicy -Scope Process Bypass }; & ''%1''"' -PropertyType String -Force | Out-Null;

Хотя, я не понимаю, зачем это надо :)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@BeatHazard
Добрый день.
У вас слишком много кавычек, попробуйте так:
"powershell.exe –NoExit -Command ""if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & %1\ -PropertyType String -Force | Out-Null"""

И я не совсем понял конструкцию & '%1'\"' -PropertyType String -Force, поэтому там расставлять кавычки не стал
Если вы тестировали выполнение кода в Powershell ISE, пришлите его, подскажу как правильно кавычки расставить.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы