Ich versuche, eine .cmd-Datei auszuführen, die ein PowerShell-Skript über den Befehl Prompt aufruft. Ich erhalte die folgende Fehlermeldung:
Management_Install.ps1 kann nicht geladen werden, da die Ausführung von Skripts auf diesem System deaktiviert ist.
Ich habe set-executionpolicy unrestricted
ausgeführt und wenn ich get-executionpolicy
von PowerShell aus laufe, bekomme ich unrestricted
zurück.
// Ausgabe von Powershell
PS C:\Benutzer\Administrator> Get-Execution Policy
Uneingeschränkt
// Ausgabe aus DOS
C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scr
ipts> powershell.\Management_Install.ps1 1
WARNUNG: x86 PowerShell wird ausgeführt ...
Die Datei C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\Management_Install.ps1 kann nicht geladen werden, da die Ausführung von Scripts auf diesem System deaktiviert ist. Weitere Informationen finden Sie unter "get-help about_signing".
Bei Zeile: 1 Zeichen: 25
.\Management_Install.ps1 <<<< 1
CategoryInfo: NotSpecified: (:) [], PSSecurityException
FullyQualifiedErrorId: RuntimeException
C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts> pausieren
Drücken Sie eine beliebige Taste, um fortzufahren . . .
Das System ist Windows Server 2008 R2.
Was mache ich falsch?
Wenn Sie Windows Server 2008 R2 verwenden, gibt es eine x64 - und x86 - Version von PowerShell, für die beide Ausführungsrichtlinien festgelegt werden müssen. Haben Sie die Ausführungsrichtlinie auf beiden Hosts festgelegt?
Als Administrator können Sie die Ausführungsrichtlinie festlegen, indem Sie diese in Ihr PowerShell-Fenster eingeben:
Set-ExecutionPolicy RemoteSigned
Weitere Informationen finden Sie unter Verwenden des Cmdlet Set-ExecutionPolicy.
Sie können diese Richtlinie umgehen, indem Sie beim Ausführen von PowerShell -ExecutionPolicy ByPass
hinzufügen
powershell -ExecutionPolicy ByPass -File script.ps1
Ich hatte ein ähnliches Problem und stellte fest, dass die Standardvariable cmd
unter Windows Server 2012 die x64-Version ausführte.
Führen Sie für Windows 7, Windows 8, Windows Server 2008 R2 oder Windows Server 2012 die folgenden Befehle als Administrator aus:
x86 (32 Bit)
Öffnen Sie C:\Windows\SysWOW64\cmd.exe
Führen Sie den Befehl powershell Set-ExecutionPolicy RemoteSigned
aus.
x64 (64 Bit)
Öffnen Sie C:\Windows\system32\cmd.exe
Führen Sie den Befehl powershell Set-ExecutionPolicy RemoteSigned
aus.
Sie können den Modus mit überprüfen
echo %PROCESSOR_ARCHITECTURE%
[Environment]::Is64BitProcess
Verweise:
MSDN - Windows PowerShell-Ausführungsrichtlinien
Windows - 32-Bit- und 64-Bit-Verzeichnis
Die meisten vorhandenen Antworten erklären das Wie, aber nur sehr wenige erklären das Warum. Und bevor Sie Code von Fremden im Internet ausführen, insbesondere Code, der Sicherheitsmaßnahmen deaktiviert, sollten Sie genau wissen, was Sie tun. Hier also ein wenig mehr zu diesem Problem.
Über das TechNet Über die Seite mit den Ausführungsrichtlinien :
Mithilfe von Windows PowerShell-Ausführungsrichtlinien können Sie die Bedingungen bestimmen, unter denen Windows PowerShell Konfigurationsdateien lädt und Skripts ausführt.
Die Vorteile, die von PowerShell-Grundlagen - Ausführungsrichtlinie und Codesignatur aufgezählt werden, sind:
- Control of Execution - Steuert die Vertrauensstufe für die Ausführung von Skripts.
- Command Highjack - Verhindert das Einfügen von Befehlen in meinen Pfad.
- Identity - Wird das Skript von einem vertrauenswürdigen Entwickler erstellt und/oder mit einem Zertifikat einer Zertifizierungsstelle signiert, der ich vertraue.
- Integrity - Skripts können nicht von Malware oder böswilligen Benutzern geändert werden.
Um Ihre aktuelle Ausführungsrichtlinie zu überprüfen, können Sie Get-ExecutionPolicy
ausführen. Aber Sie sind wahrscheinlich hier, weil Sie es ändern wollen.
Dazu führen Sie das Set-ExecutionPolicy
cmdlet aus.
Sie müssen beim Aktualisieren der Ausführungsrichtlinie zwei wichtige Entscheidungen treffen.
Restricted
† - Auf dem System kann kein lokales, entferntes oder heruntergeladenes Skript ausgeführt werden.AllSigned
- Alle Skripts, die ausgeführt werden, müssen digital signiert werden.RemoteSigned
- Alle Remote-Skripts (UNC) oder heruntergeladene Skripts müssen signiert werden.Unrestricted
- Für jede Art von Skript ist keine Signatur erforderlich.LocalMachine
† - Die Ausführungsrichtlinie betrifft alle Benutzer des Computers.CurrentUser
- Die Ausführungsrichtlinie betrifft nur den aktuellen Benutzer.Process
- Die Ausführungsrichtlinie wirkt sich nur auf den aktuellen Windows PowerShell-Prozess aus.† = Standard
Zum Beispiel: Wenn Sie die Richtlinie nur für CurrentUser in RemoteSigned ändern möchten, führen Sie den folgenden Befehl aus:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Note: Um die Ausführungsrichtlinie zu ändern, müssen Sie PowerShell As Adminstrator ..__ ausführen. Wenn Sie sich im regulären Modus befinden und versuchen, die Ausführungsrichtlinie zu ändern, wird der folgende Fehler angezeigt :
Der Zugriff auf den Registrierungsschlüssel 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' wird verweigert. Um die Ausführungsrichtlinie für den Standardbereich (LocalMachine) zu ändern, starten Sie Windows PowerShell mit der Option "Als Administrator ausführen".
Wenn Sie die internen Einschränkungen für Ihre eigenen Skripts, die nicht aus dem Internet heruntergeladen wurden (oder zumindest keine UNC-Metadaten enthalten), verschärfen möchten, können Sie erzwingen, dass die Richtlinie nur signierte Skripts ausführt. Um Ihre eigenen Skripts zu signieren, folgen Sie den Anweisungen in Scott Hanselmans Artikel unter Signieren von PowerShell-Skripts .
Note: Die meisten Benutzer erhalten diesen Fehler wahrscheinlich, wenn sie Powershell öffnen, da das erste, was PS beim Start versucht, das Benutzerprofilskript auszuführen, das Ihre Umgebung einrichtet, wie Sie es möchten.
Die Datei befindet sich normalerweise in:
%UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1
Sie können die genaue Position ermitteln, indem Sie die Powershell-Variable ausführen
$profile
Wenn Sie nichts im Profil interessiert und sich nicht mit Ihren Sicherheitseinstellungen beschäftigen möchten, können Sie es einfach löschen und powershell findet nichts, was es nicht ausführen kann.
Führen Sie diesen Befehl auch aus, bevor das Skript das Problem löst:
set-executionpolicy unrestricted
In Windows 7:
Gehen Sie zum Startmenü und suchen Sie nach "Windows PowerShell ISE".
Klicken Sie mit der rechten Maustaste auf die x86-Version und wählen Sie "Als Administrator ausführen".
Fügen Sie im oberen Teil Set-ExecutionPolicy RemoteSigned
; Führen Sie das Skript aus. Wählen Sie "Ja".
Wiederholen Sie diese Schritte auch für die 64-Bit-Version von Powershell ISE (die Nicht-x86-Version).
Ich erkläre nur die Schritte, die @Chad Miller angedeutet hat. Danke, Chad!
Wenn Sie sich in einer Umgebung befinden, in der Sie kein Administrator sind, können Sie die Ausführungsrichtlinie nur für Sie festlegen, und Sie benötigen keinen Administrator.
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"
oder
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "Unrestricted"
Sie können alles darüber in der Hilfe lesen.
Help Get-ExecutionPolicy -Full
Help Set-ExecutionPolicy -Full
RemoteSigned: Alle von Ihnen selbst erstellten Skripts werden ausgeführt und alle aus dem Internet heruntergeladenen Skripts müssen von einem vertrauenswürdigen Herausgeber signiert werden.
OK, ändern Sie die Richtlinie, indem Sie einfach Folgendes eingeben:
Set-ExecutionPolicy RemoteSigned
Wir können den Status der aktuellen ExecutionPolicy
durch den folgenden Befehl erhalten:
Get-ExecutionPolicy;
In der Standardeinstellung ist eingeschränkt . Um die Ausführung von PowerShell-Skripts zu ermöglichen, müssen Sie diese ExecutionPolicy entweder als Bypass oder Uneingeschränkt festlegen.
Wir können die Richtlinie für den aktuellen Benutzer als Bypass
oder Unrestricted
festlegen, indem Sie einen der folgenden PowerShell-Befehle verwenden:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force;
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force;
Uneingeschränkt policy lädt alle Konfigurationsdateien und führt alle Skripts aus. Wenn Sie ein nicht signiertes Skript ausführen, das aus dem Internet heruntergeladen wurde, werden Sie vor der Ausführung zur Genehmigung aufgefordert.
In Bypass policy ist nichts blockiert und es gibt keine Warnungen oder Aufforderungen während der Skriptausführung. Bypass ExecutionPolicy
ist entspannter als Unrestricted
.
Ich verwende Windows 10 und konnte keinen Befehl ausführen. Der einzige Befehl, der mir einige Hinweise gab, war der folgende:
[x64]
- Öffnen Sie C:\Windows\SysWOW64\cmd.exe [als Administrator]
- Führen Sie den Befehl> powershell Set-ExecutionPolicy Unrestricted aus.
Aber das hat nicht funktioniert. Es war begrenzt. Wahrscheinlich neue Sicherheitsrichtlinien für Windows10. Ich hatte diesen Fehler:
Set-ExecutionPolicy: Windows PowerShell hat Ihre Ausführungsrichtlinie erfolgreich aktualisiert, die Einstellung wird jedoch von einer Richtlinie überschrieben, die in einem genaueren Bereich definiert ist. Aufgrund der Außerkraftsetzung behält Ihre Shell ihre aktuelle Ausführungsrichtlinie für ...
Also habe ich einen anderen Weg gefunden ( Lösung ):
Jetzt PowerShell öffnen und genießen;)
Das Festlegen der Ausführungsrichtlinie ist umgebungsspezifisch. Wenn Sie versuchen, ein Skript aus dem laufenden x86 ISE auszuführen, müssen Sie die x86 PowerShell verwenden, um die Ausführungsrichtlinie festzulegen. Wenn Sie die 64-Bit-ISE ausführen, müssen Sie die Richtlinie ebenfalls mit der 64-Bit-PowerShell festlegen.
Win + R Geben Sie den Befehl Kopieren Einfügen ein und drücken Sie OK:
powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"
Und führen Sie Ihr Skript aus.
Dann machen Sie Änderungen rückgängig wie:
powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "AllSigned"
Sie können dies auch umgehen, indem Sie den folgenden Befehl verwenden:
PS > powershell Get-Content .\test.ps1 | Invoke-Expression
Sie können auch diesen Artikel von Scott Sutherland lesen, in dem 15 verschiedene Möglichkeiten beschrieben werden, die PowerShell Set-ExecutionPolicy
zu umgehen, wenn Sie keine Administratorrechte haben:
15 Möglichkeiten, die PowerShell-Ausführungsrichtlinie zu umgehen
Im PowerShell ISE - Editor fand ich, dass in der folgenden Zeile zuerst die zulässigen Skripts ausgeführt wurden.
Set-ExecutionPolicy RemoteSigned -Scope Process
In PowerShell 2.0 wurde die Ausführungsrichtlinie standardmäßig auf deaktiviert gesetzt.
Von da an hat das PowerShell-Team zahlreiche Verbesserungen vorgenommen, und es ist zuversichtlich, dass Benutzer beim Ausführen von Skripts nicht viel kaputt machen. Ab PowerShell 4.0 ist es daher standardmäßig aktiviert.
Geben Sie in Ihrem Fall Set-ExecutionPolicy RemoteSigned
in der PowerShell-Konsole ein und sagen Sie "Ja".
Gehen Sie zum Registrierungspfad HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
und setzen Sie ExecutionPolicy
auf RemoteSigned
.
Ich fand diese Linie am besten für einen meiner Windows Server 2008 R2-Server. Einige andere hatten keine Probleme ohne diese Zeile in meinen PowerShell-Skripts:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force -Scope Process
Öffnen Sie das PowerShell-Fenster als Administrator . Es wird klappen.
Mehrere Antworten weisen auf die Ausführungsrichtlinie hin. Einige Dinge erfordern jedoch auch "runas administrator". Dies ist am sichersten, da keine permanente Änderung der Ausführungsrichtlinie vorgenommen wird und die Administratoreinschränkung überschritten werden kann. Verwenden Sie zusammen mit schedtask einen Stapel mit:
runas.exe /savecred /user:administrator powershell -ExecutionPolicy ByPass -File script.ps1
von beiden Jack Edmonds und Peter Mortensen/Dhana von post Wie führe ich eine Anwendung als "als Administrator ausführen" von der Eingabeaufforderung aus aus?
Ich hatte heute das gleiche Problem. Die 64-Bit-Ausführungsrichtlinie war nicht eingeschränkt, während 32-Bit eingeschränkt war.
So ändern Sie nur die 32-Bit-Richtlinie aus der Ferne:
Invoke-Command -ComputerName $servername -ConfigurationName Microsoft.PowerShell32 -scriptblock {Set-ExecutionPolicy unrestricted}
Wenn Sie hier sind, weil Sie es mit Ruby oder Chef ausführen und `` Systemausführung verwenden, führen Sie die folgenden Schritte aus:
`powershell.exe -ExecutionPolicy Unrestricted -command [Environment]::GetFolderPath(\'mydocuments\')`
Dieser Befehl dient zum Abrufen des Ordners "MyDocuments".
-ExecutionPolicy Unrestricted
macht den Trick.
Ich hoffe es ist hilfreich für jemanden.