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

Wie aktiviere ich die Ausführung von PowerShell-Skripts?

Wenn ich versuche, mein PowerShell-Skript auszuführen, erhalte ich folgende Fehlermeldung:

Datei C:\Common\Scripts\hello.ps1 kann nicht geladen werden, da die Ausführung von Skripts auf diesem System deaktiviert ist. Weitere Einzelheiten finden Sie unter “get-help about_signing”. At line:1 char:13 + .\hello.ps1 <<<<< + CategoryInfo : NotSpecified: (:) [], PSSecurityException + FullyQualifiedErrorId : RuntimeException

Antworten (10)

451
451
451
2010-02-08 18:44:16 +0000
  1. Starten Sie Windows PowerShell mit der Option “Als Administrator ausführen”. Nur Mitglieder der Gruppe “Administratoren” auf dem Computer können die Ausführungsrichtlinie ändern.

  2. Aktivieren Sie die Ausführung nicht signierter Skripts durch Eingabe von:

Dies ermöglicht die Ausführung nicht signierter Skripts, die Sie auf Ihrem lokalen Computer schreiben, und signierter Skripts aus dem Internet.

Siehe auch Ausführen von Skripts in der Microsoft TechNet Library.

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

Die Standardausführungsrichtlinie ist auf “Eingeschränkt” eingestellt, Sie können sie sehen, indem Sie Folgendes eingeben:

Get-ExecutionPolicy

Sie sollten Folgendes eingeben, damit sie in den uneingeschränkten Modus wechselt:

Set-ExecutionPolicy unrestricted

Hoffentlich hilft das

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

Auf meinem Rechner, den ich zum Entwickeln von Skripten verwende, werde ich -unbeschränkt wie oben beschrieben verwenden. Wenn ich meine Skripte jedoch auf einem Endbenutzerrechner einsetze, rufe ich einfach die Power-Shell mit dem Schalter -executionpolicy auf:

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

Den Status der aktuellen ExecutionPolicy können wir mit dem folgenden Befehl abrufen:

Get-ExecutionPolicy;

Standardmäßig ist sie eingeschränkt. Um die Ausführung von PowerShell-Skripten zu ermöglichen, müssen wir diese ExecutionPolicy entweder als Bypass oder Unrestricted festlegen.

Wir können die Richtlinie für den aktuellen Benutzer als Bypass oder Unrestricted festlegen, indem wir einen der folgenden PowerShell-Befehle verwenden:

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

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

Unrestricted Richtlinie lädt alle Konfigurationsdateien und führt alle Skripte aus. Wenn Sie ein unsigniertes Skript ausführen, das aus dem Internet heruntergeladen wurde, werden Sie vor der Ausführung um Erlaubnis gefragt.

Während bei der Umgehung-Richtlinie nichts blockiert wird und es während der Skriptausführung keine Warnungen oder Aufforderungen gibt. Bypass ExecutionPolicy ist entspannter als Uneingeschränkt.

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

Je nach Windows-Version und -Konfiguration kann auch im Modus Unrestricted die folgende Warnung angezeigt werden:

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")

Die Lösung besteht in der Verwendung der “Bypass”-Richtlinie, die mit dem folgenden Befehl aktiviert wird:

Set-ExecutionPolicy Bypass

Aus der Dokumentation :

Bypass: Es wird nichts blockiert und es gibt keine Warnungen oder Aufforderungen.

Dies ist offensichtlich unsicher, bitte verstehen Sie die damit verbundenen Risiken.

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

Ein reg-Schlüssel mit: Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell] “EnableScripts”=dword:00000001 “ExecutionPolicy”=“Bypass”

und:

Windows Registry Editor Version 5.00

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

funktioniert in der Tat auch.

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

Aus irgendeinem Grund wurde mit dem Cmdlet “PowerShell” die lokale Ausführung nicht global aktiviert, sondern nur für den lokalen Benutzerkontext. Wenn ich beispielsweise versuchte, ein Powershell-Skript aus der Bash-Eingabeaufforderung von CygWin heraus zu starten, das unter seinem eigenen Benutzerkontext ausgeführt wird, wurde es nicht ausgeführt, was den Fehler “ist nicht digital signiert” zur Folge hatte. Die Antwort war, in den Editor für lokale Gruppenrichtlinien -> Lokale Computerrichtlinie -> Administrative Vorlagen -> Windows-Komponenten -> Windows PowerShell zu gehen und auf “Skriptausführung einschalten” zu doppelklicken. Dadurch konnte ich es dann in “Aktiviert” ändern und dann die Ausführungsrichtlinie “Lokale Skripte und entfernte signierte Skripte zulassen” ändern und es unabhängig vom Benutzerkontext global funktionieren lassen.

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

Das (korrekte) Festlegen der Richtlinie ist die beste Wahl, aber auf meinen verwalteten Systemen habe ich nicht die Möglichkeit, diese Richtlinie zu ä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 Verknüpfung F8 zu verwenden). *

Dies ist nicht die beste Lösung und trägt wenig zur Automatisierung von Aufgaben bei, aber es erlaubt mir die Verwendung von PowerShell, während meine IS-Abteilung nicht in Konflikt mit meiner IS-Abteilung gerät.

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

Die akzeptierte Antwort ist richtig, aber die Richtlinienänderung ist nur für die derzeit laufende Instanz der Powershell verfügbar, d.h. sobald die Instanz der Powershell abgeschaltet wird. Die Richtlinie wird zurückgesetzt. Wenn ein Benutzer eine andere Instanz der Powershell erneut öffnet, wird die Standard-Policy angewendet, d.h. 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 gefeuert wird, vielleicht ein Skript zum Ändern der Richtlinie.

Ich bin faul, also ist eine andere Lösung, wenn ich die Powershell im Verwaltungsmodus ausführe, ähnlich wie die akzeptierte Antwort. aber mit einem zusätzlichen Parameter, der Werte in der Registry-Tabelle ändert. Sobald das erledigt ist. Andere Instanzen der Powershell verwenden standardmäßig die Richtlinie RemoteSigned.

set-executionpolicy remotesigned -Scope CurrentUser

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

Der Grund dafür, dass die reg-Taste funktioniert, ist, dass sie genau das tut, was die PS-Befehle tun. Die Befehle schreiben die Änderungen in die reg-Tasten. Die Befehle sind viel schneller und einfacher als das Erstellen eines reg-Schlüssels oder das Graben in der Registrierung.