У 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 з правами адміністратора.
- Запустіть редактор реєстру (regedit.exe)
- Перейдіть в гілку HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ shell
- Створіть підрозділ з ім'ям runas і перейдіть в нього
- Всередині розділу runas створіть порожній строковий параметр (String Value) з ім'ям HasLUAShield (Цей параметр додасть іконку UAC в контекстне меню провідника)
- У розділі runas створіть вкладений підрозділ command
- Як значення параметра Default розділу command вкажіть значення:
powershell.exe "-Command" "if ((Get-ExecutionPolicy) -ne 'AllSigned') Set-ExecutionPolicy -Scope Process Bypass; & '% 1'"
- Тепер, якщо клацнути ПКМ по будь-якому * .PS1 файлу, в контекстному меню можна вибрати пункт Run as administrator
Порада. Якщо скрипт відпрацьовує швидко, користувач встигає тільки побачити з'явилося і швидко зникло вікно PowerShell. А що робити, якщо результат виконання скрипта повинен залишитися на екрані для перегляду користувачем?
Щоб після закінчення роботи скрипта, вікно консолі PowerShell не закривати, необхідно додати в рядок параметр -NoExit:
powershell.exe -NoExit "-Command" "if ((Get-ExecutionPolicy) -ne 'AllSigned') Set-ExecutionPolicy -Scope Process Bypass; & '% 1'"