В 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'"
Попробовал данное решение, вин 10 про х64 что то не появился пункт=)
Все отлично работает ! Данный вариант давно использую.
Большое спасибо, еще можно сразу здесь указать, что если у вас не запускаются скрипты ps1 из-за политики на компьютере, то надо, запустив консоль powershell с повышенными правами,прописать 1 команду: set-executionpolicy remotesigned
и все заведется
На инсайдерской 18980 не прописывается. Как можно исправить?
Не знаю, я бы подождал выхода общего билда.
win 10 pro x64 ver 1903 — сработало !
Да, на 1903 работает.
На 21H2 не работает.
Эх, Win 10 22H2 — всё ОК, а Win 11 22H2 — уже не работает. Видимо ПКМ через Доппараметры (shift+F10) отрабатывает иначе.
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\SystemFileAssociations\.ps1\Shell\runas]
«HasLUAShield»=»»
[HKEY_CLASSES_ROOT\SystemFileAssociations\.ps1\Shell\runas\command]
@=»powershell.exe \»-Command\» \»if((Get-ExecutionPolicy ) -ne ‘AllSigned’) { Set-ExecutionPolicy -Scope Process Bypass }; & ‘%1’\»»
Андрей, спасибо вам огромное!
Если консоль ругается на попытку изменения политики запуска скрипта и в организации они и так выставлены по умолчанию, достаточно во втором пункте (подразделе command) строки:
powershell.exe & «%1»
Можно использовать следующие твики:
1. Для CMD.
1.1. Включение запуска PowerShell скриптов из проводника с правами администратора
Reg Add «HKCR\Microsoft.PowerShellScript.1\Shell\RunAs» /v «HasLUAShield» /t REG_SZ /d «» /f >nul 2>&1
Reg Add «HKCR\Microsoft.PowerShellScript.1\Shell\RunAs\Command» /ve /t REG_SZ /d «PowerShell.exe \»-Command\» \»if((Get-ExecutionPolicy ) -ne ‘AllSigned’) { Set-ExecutionPolicy -Scope Process Bypass }; ^& ‘%%1’\»» /f >nul 2>&1
1.2. Отключение запуска PowerShell скриптов из проводника с правами администратора (по умолчанию)
Reg Delete «HKCR\Microsoft.PowerShellScript.1\Shell\RunAs» /f >nul 2>&1
2. Для PowerShell.
2.1. Включение запуска PowerShell скриптов из проводника с правами администратора
New-Item –Path ‘HKLM:\SOFTWARE\Classes\Microsoft.PowerShellScript.1\Shell\RunAs’ -ea SilentlyContinue | Out-Null;
New-Item –Path ‘HKLM:\SOFTWARE\Classes\Microsoft.PowerShellScript.1\Shell\RunAs\Command’ -ea SilentlyContinue | Out-Null;
New-ItemProperty -LiteralPath ‘HKLM:\SOFTWARE\Classes\Microsoft.PowerShellScript.1\Shell\RunAs’ -Name ‘HasLUAShield’ -Value » -PropertyType String -Force -ea SilentlyContinue | Out-Null;
New-ItemProperty -LiteralPath ‘HKLM:\SOFTWARE\Classes\Microsoft.PowerShellScript.1\Shell\RunAs\Command’ -Name ‘(default)’ -Value ‘PowerShell.exe «-Command» «if((Get-ExecutionPolicy ) -ne »AllSigned») { Set-ExecutionPolicy -Scope Process Bypass }; & »%1»»‘ -PropertyType String -Force -ea SilentlyContinue | Out-Null;
2.2. Отключение запуска PowerShell скриптов из проводника с правами администратора (по умолчанию)
Remove-Item -LiteralPath ‘HKLM:\SOFTWARE\Classes\Microsoft.PowerShellScript.1\Shell\RunAs’ -Force -Recurse -ea SilentlyContinue | Out-Null;