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

Тема в разделе "FAQ по Microsoft Windows", создана пользователем akok, 9 окт 2016.

  1. akok
    Оффлайн

    akok Команда форума Администратор

    Сообщения:
    12.456
    Симпатии:
    13.954
    В 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
      [​IMG]
    3. Создайте подраздел с именем runas и перейдите в него
    4. Внутри раздела runas создайте пустой строковый параметр (String Value) с именем HasLUAShield (этот параметр добавит иконку UAC в контекстное меню проводника)
    5. В разделе runas создайте вложенный подраздел command[​IMG]
    6. В качестве значения параметра Default раздела command укажите значение:
    Код (Text):
    powershell.exe "-Command" "if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1'"
    [​IMG]
    1. Теперь, если щелкнуть ПКМ по любому *.PS1 файлу, в контекстном меню можно выбрать пункт Run as administrator
      [​IMG]
    В случае если скрипт отрабатывает быстро, пользователь успевает только увидеть появившееся и быстро исчезнувшее окно PowerShell. А что делать, если результат выполнения скрипта должен остаться на экране для просмотра пользователем?

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

    Код (Text):
    powershell.exe -NoExit "-Command" "if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1'"
    Заметки IT профессионала
     
    Последнее редактирование модератором: 10 окт 2016
    Kиpилл и Dragokas нравится это.

Поделиться этой страницей