Запуск PowerShell скрипта з провідника з правами адміністратора

У Windows скрипти PowerShell (розширення .PS1) За замовчуванням не асоційовані з виконуваним файлом PowerShell.exe. При подвійному клац по файлу сценарію PS1 відкривається вікно тестового редактора notepad.exe. Запустити файл PS1 на виконання в середовищі PowerShell можна з контекстного меню провідника, вибравши пункт Run With 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 в контекстне меню провідника)
  5. У розділі runas створіть вкладений підрозділ command
  6. Як значення параметра Default розділу command вкажіть значення: powershell.exe "-Command" "if ((Get-ExecutionPolicy) -ne 'AllSigned') Set-ExecutionPolicy -Scope Process Bypass; & '% 1'"
  7. Тепер, якщо клацнути ПКМ по будь-якому * .PS1 файлу, в контекстному меню можна вибрати пункт Run as administrator

Порада. Якщо скрипт відпрацьовує швидко, користувач встигає тільки побачити з'явилося і швидко зникло вікно PowerShell. А що робити, якщо результат виконання скрипта повинен залишитися на екрані для перегляду користувачем?

Щоб після закінчення роботи скрипта, вікно консолі PowerShell не закривати, необхідно додати в рядок параметр -NoExit:

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