[PowerShell] Nie można odpalić pliku .ps1

pytanie zadane 19 listopada 2017 w Programowanie przez użytkownika koder

Napisałem skrypt w Powershellu i zapisałem go w pliku do tego przeznaczonego, czyli z rozszerzeniem .ps1, aby uruchamiać go sobie poprzez kliknięcie pliku, a nie wklepywanie za każdym razem polecenia w konsoli.

Niestety gdy go odpalam, to wyświetla mi taki błąd:

File D:\skrypty\skrypt.ps1 cannot be loaded because the execution of scripts is disabled on this system. Please see "get-help about_signing" for more details.

 Składnia skryptu na pewno jest dobra, bo gdy wklepuje ją w wierszu konsoli Powershell, to wszystko działa jak należy. Jak może być tego przyczyna?

1 odpowiedź

odpowiedź 19 listopada 2017 przez użytkownika Aleks

Błąd pojawia się dlatego, że PowerShell domyślnie ma wyłączoną opcję, wykonywania jakichkolwiek skryptów  uruchamianych z zewnętrznych plików, a nie z konsoli.

Aby sprawdzić jak masz ustawione u siebie, musisz użyć komandletu (polecenia) Set-ExecutionPolicy.

Wklejasz w konsoli PowerShell polecenie

Set-ExecutionPolicy

Wyskoczy Ci jakie masz zabezpieczenia restrykcji wykonywania plików ze skryptami.

Są cztery podstawowe parametry (ustawienia polityki wykonania):

Restricted (default) - jest to domyślne ustawienie w PowerShell i umożliwia ono wykonywanie pojedynczych komend za pomocą konsoli, ale żadnych za pomocą skryptów.

AllSigned - umożliwia wykonywanie poleceń z konsoli oraz podpisanych cyfrowo skryptów, jednocześnie pytając się o zgodę na ich wykonanie.

RemoteSigned - umożliwia wykonywanie poleceń z konsoli i skryptów napisanych lokalnie bez ograniczeń. Natomiast od tych pobranych z internetu, wymaga certyfikatu. Nie pyta o zgodę na wykonanie.

Unrestricted - polecenia i wszystkie skrypty wykonywane są bez ograniczeń. jedynie przy tych pobranych z internetu, może wyświetlić się ostrzeżenie o możliwych zagrożeniach.

Jeśli nic nie zmieniałeś, na pewno masz ustawione na Restricted. Więc aby móc odpalić swój plik musisz ustawić na Unrestricted, albo jeśli plik sam lokalnie stworzyłeś na RemoteSignedNa całkowite zniesienie ograniczeń, radzę uważać ze względu na bezpieczeństwo systemu Windows.

Aby zmienić parametry polityki wykonania, musisz uruchomić konsolę jako administrator (Run as Administrator) i wpisać polecenie:

PS D:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

 Wyświetli się monit czy przełączyć politykę, wybierz Y[Yes]

przełączanie parametru polityki wykonania skryptów w powershell

Teraz Twój skrypt w pliku .ps1 powinien się prawidłowo uruchomić.

...