Как запустить программу с аргументами и в качестве администратора с помощью PowerShell - PullRequest
0 голосов
/ 21 октября 2018

У меня есть скрипт, который должен запустить мою программу с параметрами, и да, она работает, вот она.

powershell.exe -Command "Start-Process -Verb RunAs -FilePath cmd.exe -Args /C, '\"%1\"'"

Но когда я заменяю %1 на мои пользовательские параметры, программа не хочетработать больше.Я заменяю его этими параметрами

takeown.exe /F "C:\Users\WobbyChip\Desktop\New folder" /R /D Y & icacls.exe "C:\Users\WobbyChip\Desktop\New folder" /grant Everyone:F /T

И теперь у меня есть этот скрипт, который не работает.

powershell.exe -Command "Start-Process -Verb RunAs -FilePath cmd.exe -Args /C, '\"takeown.exe /F "C:\Users\WobbyChip\Desktop\New folder" /R /D Y & icacls.exe "C:\Users\WobbyChip\Desktop\New folder" /grant Everyone:F /T\"'"

Для получения дополнительной информации я запускаю этот скрипт из контекстного меню реестра, онвыглядит такНо нет разницы запуска из реестра или еще где-то.Результат тот же.

enter image description here

И самое интересное, что мой скрипт Hide работает, но Permissions нет.Вот скрипт Hide

powershell.exe -Command "Start-Process -Verb RunAs -FilePath attrib.exe -Args +h, +s, '\"%1\"'"

Что-то интересное, пока я пытался это исправить, я получаю эту ошибку в CMD, но я понятия не имею, что это значит и как ее исправить.

enter image description here

1 Ответ

0 голосов
/ 22 октября 2018

Вложенное цитирование усложняется, и вашей команде не хватает правильного экранирования встроенных символов ".

Попробуйте выполнить следующее, которое должно работать как из cmd.exe, так и из определения команды контекстного меню вРеестр:

powershell.exe -Command Start-Process -Verb RunAs cmd.exe -Args /C, 'takeown.exe /F \"C:\Users\WobbyChip\Desktop\New folder\" /R /D Y "&" icacls.exe \"C:\Users\WobbyChip\Desktop\New folder\" /grant Everyone:F /T'
  • Опциональное цитирование опускается, где это возможно, чтобы минимизировать потребность во вложенном цитировании.

  • '...'интерпретируется PowerShell как строковый литерал, как обычно.

  • " символов.это должно быть сохранено как таковое - даже внутри '...' - должно быть экранировано как \".

  • & экранировано как "&", чтобы cmd.exe не могло его интерпретировать(вам строго не нужно это в реестре);Позднее PowerShell удаляет эти двойные кавычки, потому что они не \ -экранированные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...