2010-02-08 18:41:03 +0000 2010-02-08 18:41:03 +0000
305
305

Jak włączyć wykonywanie skryptów PowerShell?

Kiedy próbuję wykonać skrypt PowerShell'a otrzymuję następujący błąd:

File C:\C:\wspólnie}Scripts\hello.ps1 nie może być załadowany, ponieważ wykonywanie skryptów jest wyłączone w tym systemie. Więcej szczegółów znajdziesz w “get-help about_signing”. At line:1 char:13 + .\hello.ps1 <<\<< + CategoryInfo : NotSpecified: (:) [], PSSecurityException + FullyQualifiedErrorId : RuntimeException

Odpowiedzi (10)

451
451
451
2010-02-08 18:44:16 +0000
  1. Uruchomić Windows PowerShell z opcją “Uruchom jako administrator”. Tylko członkowie grupy Administratorzy na komputerze mogą zmieniać politykę wykonania.

  2. Włączenie uruchamiania niepodpisanych skryptów poprzez wpisanie:

Pozwoli to na uruchamianie niepodpisanych skryptów pisanych na komputerze lokalnym oraz podpisanych skryptów z Internetu.

Zobacz również Uruchamianie skryptów w Microsoft TechNet Library.

91
91
91
2010-02-08 18:43:25 +0000

Domyślna polityka wykonania jest ustawiona na ograniczenie, można ją zobaczyć wpisując:

Get-ExecutionPolicy

Należy wpisać następujące dane, aby przejść w tryb nieograniczony:

Set-ExecutionPolicy unrestricted

Mam nadzieję, że to pomoże

66
66
66
2013-01-14 00:46:49 +0000

Na mojej maszynie, której używam do tworzenia skryptów, będę używał - bez ograniczeń, jak powyżej. Jednak podczas wdrażania moich skryptów na maszynie użytkownika końcowego, wywołam powershell z przełącznikiem -executionpolicy:

powershell.exe -noprofile -executionpolicy bypass -file .\script.ps1
```.
21
21
21
2016-09-07 07:06:18 +0000

Status aktualnej Polityki Wykonawczej możemy uzyskać za pomocą poniższego polecenia:

Get-ExecutionPolicy;

Domyślnie jest to Restricted. Aby umożliwić wykonywanie skryptów PowerShell musimy ustawić tą Politykę Wykonywania jako Omijanie lub Nieograniczone.

Możemy ustawić politykę dla Bieżącego Użytkownika jako Bypass lub Unrestricted używając dowolnej z poniższych komend PowerShell:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force;

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force;

Polityka Nieograniczone ładuje wszystkie pliki konfiguracyjne i uruchamia wszystkie skrypty. Jeśli uruchomisz niepodpisany skrypt, który został pobrany z Internetu, zostaniesz poproszony o pozwolenie przed jego uruchomieniem.

Podczas gdy w polityce Bypass nic nie jest blokowane i nie ma żadnych ostrzeżeń ani monitów podczas wykonywania skryptu. Polityka Ominięcia Wykonania jest bardziej swobodna niż Unrestricted.

5
5
5
2016-01-21 10:01:36 +0000

W zależności od wersji i konfiguracji systemu Windows, nawet w trybie Unrestricted może pojawić się następujące ostrzeżenie:

Security warning
Run only scripts that you trust. While scripts from the internet can be useful, this
script can potentially harm your computer. If you trust this script, use the 
Unblock-File cmdlet to allow the script to run without this warning message. 
Do you want to run?
[D] Do not run [R] Run once [S] Suspend [?] Help (default is "D")

Rozwiązanie polega na zastosowaniu polityki “bypass”, włączonej za pomocą komendy:

Set-ExecutionPolicy Bypass

Z dokumentacji :

Bypass: Nic nie jest zablokowane i nie ma żadnych ostrzeżeń ani podpowiedzi.

Jest to oczywiście niepewne, proszę zrozumieć związane z tym ryzyko.

3
3
3
2017-11-29 10:10:20 +0000

Klucz reg z: Windows Registry Editor Version 5.00

[HKEY\_LOKALNA\\MASZYNA}PROGRAMOWANIE \Microsoft\Windows\PowerShell] “EnableScripts”=słowo:00000001 “ExecutionPolicy”=“Bypass”

i:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell]
"EnableScripts"=dword:00000001 "ExecutionPolicy"="Unrestricted"

rzeczywiście działa również.

1
1
1
2018-12-04 22:06:53 +0000

Z jakiegoś powodu PowerShell cmdlet nie umożliwił globalnego wykonania lokalnego, tylko dla lokalnego kontekstu użytkownika. Gdybym na przykład próbował uruchomić skrypt Powershell z wnętrza zachęty bash CygWina, który działa pod własnym kontekstem użytkownika, nie uruchomiłby się, dając błąd “nie jest podpisany cyfrowo”. Odpowiedzią było wejście do Edytora polityki grupy lokalnej -> Local Computer Policy -> Administrative Templates -> Windows Components -> Windows PowerShell i dwukrotne kliknięcie na ‘Turn on Script Execution’. To pozwoli mi zmienić go na “Włączone”, a następnie politykę wykonywania “Pozwól na wykonywanie skryptów lokalnych i zdalnie podpisanych skryptów” i sprawić, by działał globalnie niezależnie od kontekstu użytkownika.

1
1
1
2019-04-24 14:47:15 +0000

Ustawienie polityki (poprawnie) jest najlepszym wyborem, ale w moich zarządzanych systemach nie mam możliwości jej zmiany.

*Dla mnie najprostszym sposobem na zmianę polityki jest otwarcie skryptu w “PowerShell ISE”, podświetlenie kodu (lub jego części) do wykonania, a następnie kliknij przycisk “Run Selection” (lub użyj skrótu F8). *

Nie jest to najlepsze rozwiązanie i niewiele robi dla automatyzacji zadań, ale pozwala mi na użycie i użyteczność PowerShell'a, nie uruchamiając przy tym mojego działu IS.

1
1
1
2018-12-15 01:09:31 +0000

Przyjęta odpowiedź jest słuszna, ale zmiana polityki jest dostępna tylko dla aktualnie działającej instancji Powershell, czyli po wyłączeniu instancji Powershell. Polityka zostanie zresetowana. Jeśli użytkownik ponownie otworzy inną instancję Powershella, zostanie zastosowana domyślna polityka, którą jest Restricted

Dla mnie do budowania rzeczy potrzebna jest konsola kodu VisualStudio oraz g++ z cygwin. Konsola używa Powershella, z domyślną polityką, nic nie można zrobić. Jednym z rozwiązań jest zmiana polityki za każdym razem, gdy konsola jest uruchamiana w konsoli kodu VisualStudio, być może skrypt zmiany polityki.

Jestem leniwy, więc innym rozwiązaniem jest uruchomienie Powershell'a w trybie administracyjnym, podobnie jak to robi zaakceptowana odpowiedź, ale z dodatkowym parametrem, który zmienia wartości w tabeli Rejestru. Raz już to zrobione. Inne instancje Powershell będą domyślnie korzystać z polityki RemoteSigned.

set-executionpolicy remotesigned -Scope CurrentUser

-2
-2
-2
2018-04-05 13:49:49 +0000

Powodem, dla którego klucz reg działa, jest to, że robi dokładnie to, co robią komendy PS. Komendy te zapisują zmiany w kluczach reg. Polecenia są o wiele szybsze i łatwiejsze niż tworzenie klucza reg lub kopanie do rejestru.