Изпълнение на скрипт PowerShell от Explorer с права на администратор

Скриптове за Windows PowerShell (разширение) .PS1) по подразбиране не са свързани с изпълнимия файл на PowerShell.exe. Двойният щракване върху файла със скрипт PS1 отваря прозореца на тест редактора notepad.exe. Можете да стартирате PS1 файла в PowerShell от контекстното меню на Explorer, като изберете Изпълнете с PowerShell. Такъв скрипт обаче се изпълнява като част от потребителска сесия, без права на администратор. Въпреки че за същите файлове на скрипт .bat, .cmd, има отделен елемент от менюто Run As administrator. В случай на PowerShell, трябва да отворите конзолата Power Shell с повишени права и да посочите пълния път до файла на скрипта. Не е много удобно.

Помислете как да добавите File Explorer в контекстното меню за файлове с разширението * .ps1, елемент, който ви позволява да стартирате скрипта PowerShell с права на администратор.

  1. Стартиране на редактора на системния регистър (regedit.exe)
  2. Отидете до клона HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ shell
  3. Създайте под ключ с име runas и отидете на него
  4. Вътре в секцията за runas създайте празна String Value с име HasLUAShield (този параметър ще добави иконата на UAC в контекстното меню на Explorer
  5. В секцията runas създайте вложен подраздел команда
  6. Като стойност на параметъра По подразбиране раздел от командата, посочете стойността: powershell.exe "-Command" "if ((Get-ExecutionPolicy) -ne 'AllSigned') Set-ExecutionPolicy -Scope Process Bypass; & '% 1'"
  7. Сега, ако щракнете върху RMB на всеки * .PS1 файл, в контекстното меню можете да изберете Изпълнете като администратор

съвет. Ако скриптът работи бързо, потребителят трябва само да види прозореца PowerShell, който се появява и бързо изчезва. А какво ще стане, ако резултатът от скрипта трябва да остане на екрана за гледане от потребителя?

За да предотвратите затварянето на прозореца на конзолата PowerShell след приключване на скрипта, трябва да добавите параметъра към реда -NoExit:

powershell.exe -NoExit "-Command" "if ((Get-ExecutionPolicy) -ne 'AllSigned') Set-ExecutionPolicy -Scope Process Bypass; & '% 1'"