Podczas próby wykonania skryptu programu PowerShell pojawia się ten błąd:
Nie można załadować pliku C: \ Common \ Scripts \ hello.ps1, ponieważ wykonywanie skryptów jest wyłączone w tym systemie. Aby uzyskać więcej informacji, zobacz „Get-help about_signing”.
W wierszu: 1 znak: 13
+. \ Hello.ps1 <<<<
+ CategoryInfo: NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId: RuntimeException
źródło
LocalMachine
. Aby ustawić dla innych zakresów (CurrentUser
lubProcess
), podaj-Scope
jawnie.Domyślne zasady wykonywania są ustawione jako ograniczone, możesz je zobaczyć, wpisując:
Wpisz następujące polecenie, aby przejść do trybu nieograniczonego:
Mam nadzieję że to pomoże
źródło
RemoteSigned
nie blokuje kopiowania i wklejania, nie blokuje gita lub innych metod pobierania innych niż IE, to po co to jest dobre? Powiedz to ze mną: „absolutnie nic!”. Myślę, że wymaganie podpisywania skryptów przy użyciu certyfikatu do podpisywania kodu za 100 USD jest bezużyteczne, głupie i neguje wszystkie zalety dobrego języka skryptowego dla systemu Windows. To powiedziawszy, jeśli sposobem na to, aby użytkownicy zrozumieli, co robią, aby korzystać ze skryptów PS, być może będziemy zbyt sth ... Nahhhh, to nigdy nie zadziała ;-)Na mojej maszynie, której używam do tworzenia skryptów, użyję-nieograniczonego jak wyżej. Jednak podczas wdrażania moich skryptów na komputerze użytkownika końcowego po prostu wywołam PowerShell za pomocą przełącznika -executionpolicy:
źródło
Możemy uzyskać status bieżącej ExecutionPolicy za pomocą poniższego polecenia:
Domyślnie jest ograniczony . Aby umożliwić wykonywanie skryptów PowerShell, musimy ustawić ExecutionPolicy na Bypass lub Unrestricted .
Możemy ustawić zasady dla bieżącego użytkownika jako
Bypass
lubUnrestricted
za pomocą dowolnego z poniższych poleceń PowerShell:Nieograniczone zasady ładują wszystkie pliki konfiguracyjne i uruchamiają wszystkie skrypty. Jeśli uruchomisz niepodpisany skrypt pobrany z Internetu, przed uruchomieniem zostaniesz zapytany o pozwolenie.
Natomiast w polityce Bypass nic nie jest blokowane, a podczas wykonywania skryptu nie ma żadnych ostrzeżeń ani monitów. Bypass ExecutionPolicy jest bardziej zrelaksowany niż nieograniczony.
źródło
W zależności od wersji i konfiguracji systemu Windows może pojawić się następujące ostrzeżenie, nawet w
Unrestricted
trybie:Rozwiązaniem jest użycie zasady „obejścia”, włączonej za pomocą następującego polecenia:
Z dokumentacji :
Jest to oczywiście niepewne, proszę zrozumieć związane z tym ryzyko.
źródło
Klucz reg z:
Edytor rejestru systemu Windows w wersji 5.00
i:
rzeczywiście działa.
źródło
Z jakiegoś powodu polecenie cmdlet programu PowerShell nie umożliwiło globalnego wykonania lokalnego, tylko w kontekście lokalnego użytkownika. Na przykład, gdybym próbował uruchomić skrypt Powershell z wnętrza wiersza poleceń CygWin, który działa w swoim własnym kontekście użytkownika, nie uruchomiłby się, dając błąd „nie podpisano cyfrowo”. Odpowiedzią było przejście do Edytora lokalnych zasad grupy -> Lokalne zasady komputera -> Szablony administracyjne -> Składniki systemu Windows -> Windows PowerShell i kliknij dwukrotnie „Włącz wykonywanie skryptu”. To pozwala mi zmienić to na „Włączone”, a następnie zasadę wykonywania „Zezwalaj na skrypty lokalne i zdalnie podpisane skrypty” i niech działa globalnie niezależnie od kontekstu użytkownika.
źródło
Przyjęta odpowiedź jest poprawna, ale modyfikacja zasad jest dostępna tylko dla aktualnie działającej instancji Powershell, co oznacza, że po zamknięciu instancji Powershell. Zasady zostaną zresetowane. Jeśli użytkownik ponownie otworzy inne wystąpienie programu PowerShell, zastosowane zostaną domyślne zasady, które są
Restricted
Dla mnie muszę używać konsoli VisualStudio Code i g ++ z cygwin do budowania różnych rzeczy. Konsola używa Powershell, przy domyślnych zasadach nic nie można zrobić. Jednym rozwiązaniem jest zmiana zasad przy każdym uruchomieniu konsoli w konsoli VisualStudio Code, być może skrypt zmiany zasad.
Jestem leniwy, więc innym rozwiązaniem jest uruchomienie Powershell w trybie administratora, podobnie do tego, co robi zaakceptowana odpowiedź. ale z dodatkowym parametrem, który zmienia wartości w tabeli rejestru. Po zakończeniu. Inne wystąpienia programu PowerShell
RemoteSigned
domyślnie używają zasad.set-executionpolicy remotesigned -Scope CurrentUser
źródło
Ustawienie zasady (poprawnie) jest najlepszym wyborem, ale w moich systemach zarządzanych nie mam możliwości jej zmiany.
Dla mnie najprostszym obejściem zmiany zasad jest otwarcie skryptu w „PowerShell ISE” , wyróżnienie kodu (lub części kodu) do wykonania, a następnie kliknięcie przycisku „Uruchom zaznaczenie” (lub użyć F8 skrót).
Nie jest to najlepsze rozwiązanie i niewiele robi na rzecz automatyzacji zadań, ale pozwala mi korzystać z programu PowerShell i korzystać z niego, nie działając jednocześnie w moim dziale IS.
źródło
Powodem, dla którego działa klucz reg, jest to, że robi dokładnie to, co robią polecenia PS. Polecenia zapisują zmiany w kluczach reg. Polecenia są znacznie szybsze i łatwiejsze niż tworzenie klucza reg lub wczytywanie rejestru.
źródło