Windows Как запустить скрипт PowerShell (PS1) из проводника

Может относиться для любой версии Windows

Переводчик Google

akok

Команда форума
Администратор
Ассоциация VN
Сообщения
26,130
Решения
13
Реакции
13,891
В Windows скрипты PowerShell (с расширением .PS1) по умолчанию не связаны с исполняемым файлом PowerShell.exe. При двойном щелчке по PS1-файлу вместо выполнения скрипта открывается окно текстового редактора (например, Notepad). Для запуска PS1-скрипта в среде PowerShell из проводника требуется выбрать пункт "Run With PowerShell" в контекстном меню. Однако такой запуск выполняется только в рамках пользовательской сессии, без прав администратора.

Для других типов скриптов, таких как .bat или .cmd, предусмотрен отдельный пункт меню "Run As Administrator". В случае с PowerShell для выполнения скрипта с повышенными правами необходимо вручную открыть консоль PowerShell с правами администратора и указать полный путь к файлу. Такой подход явно неудобен и требует дополнительного времени.


Добавление пункта "Run as administrator" в контекстное меню для PS1-скриптов​


  1. Откройте редактор реестра, введя regedit.exe в строку поиска Windows и запустив его.
  2. Перейдите в ветку HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\shell

    HKEY_CLASSES_ROOT-Microsoft.PowerShellScript.1.webp
  3. Создайте новый подраздел с именем runas и откройте его.
  4. Внутри раздела runas создайте пустой строковый параметр (String Value) с именем HasLUAShield. Этот параметр добавляет значок UAC (User Account Control) в контекстное меню проводника.
  5. В разделе runas создайте вложенный подраздел с именем command.
  6. HasLUAShield.webp
  7. Установите значение параметра Default в разделе command следующим образом:
Код:
powershell.exe "-Command" "if((Get-ExecutionPolicy ) -ne 'Bypass') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1'"

powershell.exe-Command.webp
Теперь, если щелкнуть ПКМ по любому *.PS1 файлу, в контекстном меню можно выбрать пункт Run as administrator
PowerShell-RunAsAdministrator.webp

В случае если скрипт отрабатывает быстро, пользователь успевает только увидеть появившееся и быстро исчезнувшее окно PowerShell. А что делать, если результат выполнения скрипта должен остаться на экране для просмотра пользователем?

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

Код:
powershell.exe -NoExit "-Command" "if((Get-ExecutionPolicy ) -ne 'Bypass') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1'"

Источник
 
Последнее редактирование:
Чтобы после окончания работы скрипта, окно консоли PowerShell не закрывалось, необходимо добавить в строку параметр -NoExit:
Либо запустить ps1 скрипт с помощью редактора Powershell ISE. Он находится здесь:
Код:
%windir%\system32\WindowsPowerShell\v1.0\PowerShell_ISE.exe
 
Для других типов скриптов, таких как .bat или .cmd, предусмотрен отдельный пункт меню "Run As Administrator". В случае с PowerShell для выполнения скрипта с повышенными правами необходимо вручную открыть консоль PowerShell с правами администратора и указать полный путь к файлу. Такой подход явно неудобен и требует дополнительного времени.
Прежде чем так делать, необходимо также сперва зайти в powershell.exe и выполнить команду:
Код:
Set-ExecutionPolicy -Scope Process Bypass
 
Назад
Сверху Снизу