Uruchamianie skryptu PowerShell z Eksploratora z uprawnieniami administratora

Skrypty Windows PowerShell (rozszerzenie .PS1) domyślnie nie są powiązane z plikiem wykonywalnym PowerShell.exe. Dwukrotne kliknięcie pliku skryptu PS1 otwiera okno edytora testów notepad.exe. Możesz uruchomić plik PS1 w PowerShell z menu kontekstowego Eksploratora, wybierając Uruchom z PowerShell. Taki skrypt jest jednak uruchamiany w ramach sesji użytkownika bez uprawnień administratora. Chociaż dla tych samych plików skryptów .bat, .cmd istnieje osobny element menu Uruchom jako administrator. W przypadku programu PowerShell należy otworzyć konsolę Power Shell z podwyższonymi uprawnieniami i podać pełną ścieżkę do pliku skryptu. Niezbyt wygodne.

Zastanów się, jak dodać Eksploratora plików do menu kontekstowego dla plików z rozszerzeniem * .ps1, elementu, który pozwala uruchomić skrypt PowerShell z uprawnieniami administratora.

  1. Uruchom Edytor rejestru (regedit.exe)
  2. Idź do oddziału HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ shell
  3. Utwórz podklucz o nazwie runy i idź do tego
  4. Wewnątrz sekcji runas utwórz pustą wartość ciągu o nazwie HasLUAShield (ten parametr doda ikonę UAC do menu kontekstowego eksploratora)
  5. W sekcji runas utwórz zagnieżdżoną podsekcję polecenie
  6. Jako wartość parametru Domyślnie w sekcji polecenia podaj wartość: powershell.exe „-Command” „if ((Get-ExecutionPolicy) -ne„ AllSigned ”) Set-ExecutionPolicy -Scope Process Bypass; & '% 1'”
  7. Teraz, jeśli klikniesz RMB na dowolnym pliku * .PS1, w menu kontekstowym możesz wybrać Uruchom jako administrator

Wskazówka. Jeśli skrypt działa szybko, użytkownik musi tylko zobaczyć okno programu PowerShell, które się pojawi i szybko zniknie. A co, jeśli wynik skryptu powinien pozostać na ekranie do oglądania przez użytkownika?

Aby zapobiec zamknięciu okna konsoli PowerShell po zakończeniu skryptu, musisz dodać parametr do wiersza -Noexit:

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