it-swarm.com.de

PowerShell sagt, dass die Ausführung von Skripts auf diesem System deaktiviert ist.

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?

1396
Conor

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.

1836
Chad Miller

Sie können diese Richtlinie umgehen, indem Sie beim Ausführen von PowerShell -ExecutionPolicy ByPass hinzufügen

powershell -ExecutionPolicy ByPass -File script.ps1
592
Jack Edmonds

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 

  • In CMD: echo %PROCESSOR_ARCHITECTURE%
  • In Powershell: [Environment]::Is64BitProcess

Verweise:
MSDN - Windows PowerShell-Ausführungsrichtlinien
Windows - 32-Bit- und 64-Bit-Verzeichnis

114
Ralph Willgoss

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.

Ausführungsrichtlinien-Typ:

  • 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.

Umfang der neuen Veränderung

  • 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.

103
KyleMit

Führen Sie diesen Befehl auch aus, bevor das Skript das Problem löst:

set-executionpolicy unrestricted
34
manik sikka

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!

34
Ryan

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
23
Jaime

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.

19
Pratik Patil

Ich verwende Windows 10 und konnte keinen Befehl ausführen. Der einzige Befehl, der mir einige Hinweise gab, war der folgende:

[x64]

  1. Öffnen Sie C:\Windows\SysWOW64\cmd.exe [als Administrator]
  2. 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 ):

  1. Öffnen Sie Run Command/Console (Win + R)
  2. Geben Sie Folgendes ein: gpedit.msc ( Gruppenrichtlinien Editor)
  3. Navigieren Sie zu Lokale Computerrichtlinie -> Computerkonfiguration -> Administrative Vorlagen - > Windows-Komponenten -> Windows PowerShell .
  4. Aktivieren Sie " Skriptausführung einschalten "
  5. Stellen Sie die Richtlinie nach Bedarf ein. Ich habe meine auf " Alle Skripte zulassen " gesetzt.

Jetzt PowerShell öffnen und genießen;)

18
hugocabral

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.

9
ScriptAholic

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"
8
Qamar

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

7
Alexander Sinno
  1. Öffnen Sie die PowerShell als Administrator und führen Sie Set-ExecutionPolicy -Scope CurrentUser aus.
  2. Stellen Sie RemoteSigned bereit und drücken Sie die Eingabetaste
  3. Run Set-ExecutionPolicy - Scope CurrentUser
  4. Geben Sie Uneingeschränkt ein und drücken Sie die Eingabetaste
5
Ramanujam Allam

Im PowerShell ISE - Editor fand ich, dass in der folgenden Zeile zuerst die zulässigen Skripts ausgeführt wurden.

Set-ExecutionPolicy RemoteSigned -Scope Process
2
David Douglas

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

1
Adil Arif

Gehen Sie zum Registrierungspfad HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell und setzen Sie ExecutionPolicy auf RemoteSigned.

1

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
0
WIlliamT

Öffnen Sie das PowerShell-Fenster als Administrator . Es wird klappen.

0
Suganthan Raj

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?

0
Kirt Carson

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}
0
rko281

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.

0
JGutierrezC