Запустите PowerShell, режим администратора, в каталоге из контекстного меню оболочки - PullRequest
0 голосов
/ 07 января 2019

Я создал каскадное контекстное меню оболочки Shell для открытия PowerShell в каталоге, используя код, показанный ниже. (Примечание: у меня есть пример пути, жестко запрограммированный в команде администратора для тестирования.)

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\powershell.exe]
"MUIVerb"=""
"SubCommands"="powershell;powershell_admin"
"Icon"="PowerShell.exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\powershell]
@="Open PowerShell here"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\powershell\command]
@="powershell.exe -NoLogo -NoExit -Command Set-Location '%V'"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\powershell_admin]
@="Open PowerShell (admin) here"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\powershell_admin\command]
@="powershell.exe -Command 'Start-Process PowerShell -ArgumentList \"-NoLogo -NoExit -Command Set-Location C:\Python27\" -Verb RunAs'"

Команда без прав администратора работает отлично. Команда admin игнорирует все в ArgumentList.

Если я открою PowerShell и сразу выполню код в одинарных кавычках ('), он будет работать нормально. E.G.:

Start-Process PowerShell -ArgumentList \"-NoLogo -NoExit -Command Set-Location C:\Python27\" -Verb RunAs

Но при выполнении из контекстного меню оно открывается в режиме администратора, но отображает логотип и не выполняет Set-Location.

Заранее спасибо

1 Ответ

0 голосов
/ 08 января 2019

Это крутая утилита. Я установил записи реестра для эксперимента, и теперь, когда он работает, я, вероятно, сохраню его.

В моих экспериментах окно закрывалось немедленно, даже до того, как оно вызывало диалог UAC, пока я не заключил внешнюю команду в двойные кавычки, а внутренние параметры в одинарные кавычки. Тогда он работал нормально для всех папок, кроме тех, которые находятся в папке Program Files. Для этого нам нужно заключить% v в одинарные кавычки и дважды убрать двойные кавычки:

@="powershell.exe -command \"start-process powershell.exe -ArgumentList \\\"-NoLogo -NoExit -Command Set-Location '%v'\\\"  -verb RunAs\""

Я использовал% v - имя папки контекста, которое выглядело как ваше первоначальное намерение, основанное на метке меню «Open Powershell (admin) здесь»).

Примечания по отладке:

  • Для экспериментов немного проще внести изменения в Regedit.exe и позволить функции экспорта добавлять экранирующие символы при необходимости
  • В Windows 10 вы можете вносить изменения непосредственно в Regedit.exe, и контекстное меню / действие немедленно обновляется, что я подтвердил, добавив метку времени к метке меню
  • В других версиях Windows может потребоваться остановить и перезапустить explorer.exe
...