Da diese Frage weiterhin Antworten anzieht, die entweder vom Fragentext widerlegt werden oder das eigentliche Problem nicht ansprechen, lesen Sie bitte diese einfache Zusammenfassung dessen, was Sie wissen müssen:
- Dies ist kein "Warum werden bei meiner Standardinstallation von PowerShell keine Skripts ausgeführt?" Frage.
- Dies ist kein "Warum werden bei meiner Installation von PowerShell keine aus dem Internet heruntergeladenen Skripts ausgeführt?" Frage.
- Die Frage ist, warum die
RemoteSigned
Ausführungsrichtlinie die Skriptausführung verhindert, wenn dies nicht der Fall sein sollte.RemoteSigned
ist die einzige Ausführungsrichtlinie, die ich verwenden möchte. Mir ist bekannt, dass andere, weniger restriktive Richtlinien verfügbar sind. Wenn diese Richtlinien akzeptable Ersatzprodukte wären, hätte ich sie stattdessen nur verwendet, und diese Frage würde nicht existieren.- Die Ausführungsrichtlinie ist bereits auf festgelegt
RemoteSigned
. Ein Wechsel vonRemoteSigned
zuRemoteSigned
ist keine Lösung.- Die Skriptdatei wird lokal erstellt und gespeichert.
- Die Skriptdatei ist nicht blockiert. Die Skriptdatei wurde nie blockiert (siehe vorherigen Punkt).
- Die Skriptdatei kann nicht entsperrt werden, da nichts zu entsperren ist (siehe vorherigen Punkt).
- Die Skriptdatei wird (versucht) von einem Administrator ausgeführt.
Windows PowerShell
ist die einzige betroffene Anwendung. WederWindows PowerShell ISE
nochCommand Prompt
andere Tools oder Editoren sind relevant.- Die Ursache des Problems wurde bereits identifiziert (siehe akzeptierte Antwort). Nach fast 8 Jahren denke ich, dass auch alle anderen offensichtlichen Erklärungen, ob zutreffend oder nicht, veröffentlicht wurden. Wenn Sie anders denken , lesen Sie bitte die Frage und die vorhandenen Antworten vollständig durch, bevor Sie Ihre hinzufügen.
Ich verwende Windows PowerShell 2.0 unter 64-Bit Windows 7 Professional. Ich habe ein Skript auf meinem Desktop
, das den folgenden Fehler verursacht, wenn ich versuche, es auszuführen:
File C:\Users\UserName\Desktop\Script.ps1 cannot be loaded. The file C:\Users\UserName\Desktop\Script.ps1 is not digitally signed. The script will not execute on the system. Please see "get-help about_signing" for more details..
At line:1 char:54
+ C:\Users\UserName\Desktop\TestGetWindowsUpdateLog.ps1 <<<<
+ CategoryInfo : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : RuntimeException
Ich bin sowohl Domänenadministrator als auch lokaler Administrator. Wenn ich ausgeführt werde Get-ExecutionPolicy -List
, kann ich feststellen, dass die Group Policy Object
zur Konfiguration von PowerShell erstellte RemoteSigned
Ausführungsrichtlinie die Ausführungsrichtlinie auf Computerebene korrekt anwendet :
Scope ExecutionPolicy
----- ---------------
MachinePolicy RemoteSigned
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Undefined
Ich habe das Skript selbst erstellt Notepad
und mithilfe des streams
Dienstprogramms von Sysinternals und des Properties
Dateidialogs bestätigt, dass das Skript nicht als aus dem Internet stammend behandelt wird. Wenn ich das Skript auf eine Netzwerkfreigabe auf einem Domänenserver kopiere, kann es ausgeführt werden. Wenn ich Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine
es ausführe, darf das lokale Skript immer noch nicht ausgeführt werden. Dies ist sinnvoll, da die Ausführungsrichtlinie im MachinePolicy
Bereich Vorrang hat.
Wie dokumentiert durch about_Execution_Policies
( aktuell ; zum Zeitpunkt der Frage ) RemoteSigned
bedeutet die Richtlinie:
Skripte können ausgeführt werden.
Erfordert eine digitale Signatur eines vertrauenswürdigen Herausgebers für Skripte und Konfigurationsdateien, die aus dem Internet heruntergeladen werden (einschließlich E-Mail- und Instant Messaging-Programmen).
Erfordert keine digitalen Signaturen für Skripte, die Sie ausgeführt und auf dem lokalen Computer geschrieben haben (nicht aus dem Internet heruntergeladen).
Risiken beim Ausführen nicht signierter Skripte aus anderen Quellen als dem Internet und signierter, aber böswilliger Skripte.
Mein Skript ist nicht signiert, aber da es lokal erstellt und ausgeführt wird, sollte es den dritten Punkt oben erfüllen. Deshalb...
- Warum darf mein Skript nicht ausgeführt werden?
- Warum beschwert sich PowerShell darüber, dass mein Skript "nicht digital signiert" ist, wenn diese Anforderung nur für Dateien aus dem Internet gelten sollte?
- Warum kümmert sich PowerShell nicht mehr darum, dass das Skript nicht signiert wird, wenn es von einer Netzwerkfreigabe ausgeführt wird?
Antworten:
Wird die Datei blockiert? Ich hatte das gleiche Problem und konnte es beheben, indem ich mit der rechten Maustaste auf die PS1-Datei Eigenschaften klickte und die Option Entsperren aufnahm.
quelle
'Write-Host ''Hello, World!'';' > .\Test.ps1; .\Test.ps1;
erhalte ich immer noch die Fehlermeldung, dass das Skript nicht digital signiert und nicht ausgeführt wird. Wenn ich das Dialogfeld Eigenschaften für die neu erstellte Datei öffne, kann nichts entsperrt werden.ps1
Datei mit der rechten Maustaste, um das Kontextmenü aufzurufen, und wählen SieProperties
auf der ersten Registerkarte unten aus, dass die Datei blockiert ist, und aktivieren Sie ein Kontrollkästchen, um sie zu entsperren.Einige Dinge zu überprüfen:
Können Sie uneingeschränkt wechseln?
Ist die Gruppenrichtlinie festgelegt?
Computer Configuration\Administrative Templates\Windows Components\Windows PowerShell
User Configuration\Administrative Templates\Windows Components\Windows PowerShell
Wie ruft man Script.ps1 auf?
Lässt es das laufen?
quelle
Scope
Parameter istLocalMachine
, entspricht alsoSet-ExecutionPolicy Unrestricted
praktisch dem, denSet-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine
ich bereits versucht hatte. Ja, dieTurn on Script Execution
Richtlinie ist für aktiviertComputer Configuration
.PowerShell
öffnet sich zuC:\Users\UserName
, also laufe ich einfach.\Desktop\Script.ps1
an der Eingabeaufforderung. Die Verwendung des absoluten Pfads führt zu demselben Fehler wie das Aufrufen des Skripts überpowershell.exe
.gpupdate /force
? (Relaunch PowerShell.exe nach)Unrestricted
imLocalMachine
Bereich, aber als ich anfing, Skripte zu schreiben, wollte ich von anderen Computern ausgeführt werden, auf die ichLocalMachine
zurückgesetzt habe,Undefined
und fügte die aktuelle Gruppenrichtlinie hinzu, dieRemoteSigned
imMachinePolicy
Bereich festgelegt wurde. Dies ist nur ein einmaliges Testskript und es ist wirklich keine große Sache, es stattdessen über das Netzwerk auszuführen. Ich möchte nur wissen, warum es lokal nicht funktioniert. Schließlich sollte ein lokal erstelltes Skript unter ausgeführt werden dürfenRemoteSigned
, oder? Ich dachte nur, dass es etwas geben muss, das mir fehlt oder das ich nicht verstehe.RemoteSigned
speichernWrite-Host hi
, sollte dies einwandfrei funktionieren . Ihre Konfiguration sieht auch in Ordnung aus ... Mir scheint etwas kaputt zu sein ... Deshalb habe ich vorgeschlagen, die Gruppenrichtlinie zu entfernen, um zu sehen, ob sie hilft.-executionpolicy bypass
das Problem mit den Remotesigns nur vorübergehend überwunden ... und damit andere Probleme aufgedeckt und behoben (unabhängig davon, dass wir PowerShell aktualisieren mussten).Ich habe dies schließlich auf .NET Code Access Security zurückgeführt . Ich habe einige intern entwickelte Binärmodule, die auf einer Netzwerkfreigabe gespeichert und von dieser ausgeführt werden. Damit .NET 2.0 / PowerShell 2.0 sie laden kann, habe ich der
Intranet
Codegruppe eine URL-Regel hinzugefügt , um diesem Verzeichnis zu vertrauen:Beachten Sie, dass abhängig davon, welche Versionen von .NET installiert sind und ob es sich um 32- oder 64-Bit-Windows handelt,
caspol.exe
an den folgenden Speicherorten mit jeweils eigener Sicherheitskonfiguration (security.config
) vorhanden sein kann:$Env:SystemRoot\Microsoft.NET\Framework\v2.0.50727\
$Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\
$Env:SystemRoot\Microsoft.NET\Framework\v4.0.30319\
$Env:SystemRoot\Microsoft.NET\Framework64\v4.0.30319\
Nach dem Löschen der Gruppe
1.2.3.
...... Ich habe die Standard-CAS-Konfiguration und die lokalen Skripte funktionieren jetzt wieder. Es ist schon eine Weile her, dass ich an CAS herumgebastelt habe, und ich bin mir nicht sicher, warum meine Regel die Gewährung
FullTrust
von CAS zu beeinträchtigen scheintMyComputer
, aber da CAS ab .NET 4.0 (auf dem PowerShell 3.0 basiert) veraltet ist, habe ich Ich denke, es ist jetzt ein strittiger Punkt.quelle
caspol.exe
, aber nach dem Laufen habecaspol.exe -machine -addgroup 1.2 -url file://Server/Share/Directory/WindowsPowerShell/Modules/* FullTrust
ich die gleiche1.2.3.
Regel wie in dieser Antwort erhalten. Ich habe einefile://
URL verwendet, um auf ein Verzeichnis auf einer SMB-Freigabe zu verweisen, obwohl in der Dokumentation eines der-addgroup
Beispiele einen UNC-Pfad verwendet.Ich habe beim Ausführen einer PS1-Datei für ein zugeordnetes Laufwerk zu Dropbox festgestellt, dass immer dieser Fehler angezeigt wird. Beim Öffnen von Eigenschaften für die PS1 gibt es kein "Entsperren".
Das einzige, was für mich funktioniert, ist
Powershell.exe -Executionpolicy Bypass-Datei. \ Script.ps1
quelle
Bypass
Ausführungsrichtlinie bereits vor über fünf Jahren und erst vor fünf Monaten vorgeschlagen . Bitte lesen Sie die Frage und die vorhandenen Antworten, bevor Sie antworten.Wenn die Datei von einem Netzwerkspeicherort, dh einem anderen Computer, kopiert wird, hat Windows diese Datei möglicherweise blockiert. Klicken Sie mit der rechten Maustaste auf die Datei und klicken Sie auf die Schaltfläche zum Entsperren, um festzustellen, ob sie funktioniert.
quelle
'Write-Host ''Hello, World!'';' > .\Test.ps1; .\Test.ps1;
bekam ich immer noch die Fehlermeldung, dass das Skript nicht digital signiert und nicht ausgeführt wurde. Wenn ich das Dialogfeld "Eigenschaften" für die neu erstellte Datei geöffnet habe, konnte nichts entsperrt werden.Dies ist ein IDE-Problem. Ändern Sie die Einstellung in der PowerShell-Benutzeroberfläche. Gehen Sie auf die Werkzeuge Menü und wählen Sie Optionen und anschließend Optionen Debuggen . Aktivieren Sie dann das Kontrollkästchen Anforderung zum Signieren von Skripten deaktivieren . Getan.
quelle
Was für mich funktioniert, war ein Rechtsklick auf die .ps1-Datei und dann auf die Eigenschaften. Klicken Sie auf die Schaltfläche "UNBLOCK". Funktioniert hervorragend für mich, nachdem ich stundenlang versucht habe, die Richtlinien zu ändern.
quelle
Bitte erstellen Sie ein Backup für die Datei script.bs1
Was für mich funktioniert, war das Löschen der Datei script.bs1 und das Ausführen des Ausführungsbefehls.
quelle
Get-ExecutionPolicy -List
?Wählen Sie anstelle der Power Shell die Eingabeaufforderung Ihres Terminals aus. Das sollte funktionieren.
quelle
Wenn Sie ein .ps1 PowerShell-Skript ausführen, wird möglicherweise die Meldung angezeigt, dass .ps1 nicht digital signiert ist. Das Skript wird auf dem System nicht ausgeführt. “ Um dies zu beheben, müssen Sie den folgenden Befehl ausführen, um Set-ExecutionPolicy auszuführen und die Einstellung für die Ausführungsrichtlinie zu ändern.
quelle
Bypass
Ausführungsrichtlinie zu verwenden. Die Verwendung einer anderen Richtlinie ist sowieso nicht hilfreich und behebt das eigentliche Problem nicht, wenn esRemoteSigned
wirklich erforderlich ist. Schließlich ist die Fehlermeldung, auf die Sie verweisen, nicht dieselbe wie in der Frage.Ich hatte das gleiche Problem und habe es behoben, indem ich das Standardprogramm so geändert habe, dass .ps1-Dateien in PowerShell geöffnet werden. Es wurde auf Notepad gesetzt .
quelle
.ps1
Datei doppelklicken, die im Editor geöffnet wird, anstatt das Skript in PowerShell auszuführen?Versuchen Sie, die Powershell-Benutzeroberfläche als Administrator auszuführen
quelle
I am both a domain administrator and a local administrator
. Das Ausführen von PowerShell mit erhöhten Rechten würde keinen Unterschied machen, da das Skript bei Speicherung auf einer Netzwerkfreigabe nicht hoch ausgeführt werden durfte.Führen Sie im PowerShell-Fenster die folgenden 2 Befehle aus
Set-ExecutionPolicy uneingeschränkt
Unblock-File -Path D: \ PowerShell \ Script.ps1
quelle