Wenn ich versuche, mein PowerShell-Skript auszuführen, wird folgende Fehlermeldung angezeigt:
Die Datei C: \ Common \ Scripts \ hello.ps1 kann nicht geladen werden, da die Ausführung von Skripten auf diesem System deaktiviert ist. Weitere Informationen finden Sie unter "get-help about_signing".
In Zeile: 1
Zeichen : 13 +. \ Hello.ps1 <<<<
+ CategoryInfo: NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId: RuntimeException
quelle
LocalMachine
. Um für andere Bereiche (CurrentUser
oderProcess
) festzulegen , übergeben Sie-Scope
explizit.Die Standardausführungsrichtlinie ist auf "Eingeschränkt" eingestellt. Sie können sie anzeigen, indem Sie Folgendes eingeben:
Sie sollten Folgendes eingeben, um in den uneingeschränkten Modus zu wechseln:
Hoffe das hilft
quelle
RemoteSigned
Copy & Paste nicht blockiert, Git oder andere nicht-IE-Download-Methoden nicht blockiert, wofür ist es dann gut? Sag es mit mir: "absolut nichts!". Ich denke, es ist nutzlos, Skripte mit einem 100-Dollar-Codesignaturzertifikat signieren zu müssen, und es negiert alles Gute, das eine anständige Skriptsprache für Windows leisten kann. Davon abgesehen, wenn der richtige Weg ist , Benutzer zu bekommen , um zu verstehen , was sie damit tun PS - Skripte verwenden, dann können wir auch sth ... Nahhhh, das wird nie funktionieren ;-)Auf meinem Computer, den ich zum Entwickeln von Skripten verwende, verwende ich -unrestricted wie oben. Wenn ich meine Skripte jedoch auf einem Endbenutzercomputer bereitstelle, rufe ich nur Powershell mit der Option -executionpolicy auf:
quelle
Mit dem folgenden Befehl können wir den Status der aktuellen ExecutionPolicy abrufen:
Standardmäßig ist es eingeschränkt . Um die Ausführung von PowerShell-Skripten zu ermöglichen, müssen Sie ExecutionPolicy auf Bypass oder Unrestricted setzen .
Wir können die Richtlinie für den aktuellen Benutzer als
Bypass
oderUnrestricted
mithilfe eines der folgenden PowerShell-Befehle festlegen :Durch eine uneingeschränkte Richtlinie werden alle Konfigurationsdateien geladen und alle Skripts ausgeführt. Wenn Sie ein nicht signiertes Skript ausführen, das aus dem Internet heruntergeladen wurde, werden Sie vor der Ausführung zur Erlaubnis aufgefordert.
Während in der Umgehungsrichtlinie nichts blockiert ist und während der Skriptausführung keine Warnungen oder Eingabeaufforderungen angezeigt werden. Bypass ExecutionPolicy ist entspannter als Uneingeschränkt.
quelle
Abhängig von der Windows-Version und -Konfiguration wird möglicherweise auch im
Unrestricted
Modus die folgende Warnung angezeigt :Die Lösung besteht darin, die "Bypass" -Richtlinie zu verwenden, die mit dem folgenden Befehl aktiviert wird:
Aus der Dokumentation :
Dies ist offensichtlich unsicher, bitte verstehen Sie die damit verbundenen Risiken.
quelle
Ein
Registrierungsschlüssel mit: Windows Registry Editor Version 5.00
und:
funktioniert ja auch.
quelle
Aus irgendeinem Grund hat das PowerShell-Cmdlet die globale lokale Ausführung nur für den lokalen Benutzerkontext nicht aktiviert. Wenn ich zum Beispiel versuchen würde, ein Powershell-Skript über die Bash-Eingabeaufforderung von CygWin zu starten, das unter einem eigenen Benutzerkontext ausgeführt wird, würde es nicht ausgeführt, was den Fehler "Nicht digital signiert" zur Folge hätte. Die Antwort war, in den Editor für lokale Gruppenrichtlinien -> Richtlinie für lokalen Computer -> Administrative Vorlagen -> Windows-Komponenten -> Windows PowerShell zu wechseln und auf "Skriptausführung aktivieren" zu doppelklicken. Dadurch kann ich es in "Aktiviert" ändern und dann die Richtlinie "Lokale Skripte und remote signierte Skripte zulassen" ausführen und unabhängig vom Benutzerkontext global ausführen.
quelle
Die akzeptierte Antwort ist richtig, aber die Richtlinienänderung ist nur für die aktuell ausgeführte Instanz von Powershell verfügbar, dh sobald die Instanz von Powershell heruntergefahren wurde. Die Richtlinie wird zurückgesetzt. Wenn ein Benutzer eine andere Instanz von Powershell erneut öffnet, wird die Standardrichtlinie angewendet
Restricted
Für mich muss ich die VisualStudio Code-Konsole und g ++ von Cygwin verwenden, um Dinge zu erstellen. Die Konsole verwendet Powershell. Mit der Standardrichtlinie kann nichts getan werden. Eine Lösung besteht darin, die Richtlinie jedes Mal zu ändern, wenn die Konsole in der VisualStudio Code-Konsole ausgelöst wird. Möglicherweise handelt es sich dabei um ein Skript zum Ändern der Richtlinie.
Ich bin faul, also ist eine andere Lösung, wenn ich die PowerShell im Admin-Modus ausführe, ähnlich wie die akzeptierte Antwort. aber mit einem zusätzlichen Parameter, der die Werte in der Registrierungstabelle ändert. Sobald es fertig ist. Andere Instanzen von Powershell verwenden die
RemoteSigned
Richtlinie standardmäßig.set-executionpolicy remotesigned -Scope CurrentUser
quelle
Das (richtige) Festlegen der Richtlinie ist die beste Wahl, aber auf meinen verwalteten Systemen kann ich diese Richtlinie nicht ändern.
Für mich besteht die einfachste Lösung zum Ändern der Richtlinie darin, das Skript in der "PowerShell ISE" zu öffnen, den auszuführenden Code (oder einen Teil des Codes) zu markieren und dann auf die Schaltfläche "Auswahl ausführen" zu klicken (oder die Taste F8 zu verwenden) Abkürzung).
Dies ist nicht die beste Lösung und macht wenig für die Automatisierung von Aufgaben, aber es ermöglicht mir die Verwendung und das Nutzen von PowerShell, während ich nicht mit meiner IS-Abteilung in Konflikt stehe.
quelle
Der Grund, warum die Reg-Taste funktioniert, ist, dass sie genau das tut, was die PS-Befehle tun. Die Befehle schreiben die Änderungen in die Registertasten. Befehle sind viel schneller und einfacher als das Erstellen eines Registrierungsschlüssels oder das Eingraben in die Registrierung.
quelle