PowerShell 19.06.2020, 08:00 Uhr

Windows 10 verweigert Ausführung von PowerShell-Skript

Beim Versuch, ein PowerShell-Skript zu starten heisst es: «Die Datei kann nicht geladen werden, da die Ausführung von Skripts auf diesem System deaktiviert ist». Was nun?
Windows führt standardmässig keine PowerShell-Skripts aus
(Quelle: PCtipp.ch)
Die Fehlermeldung teilt Ihnen mit, dass Ihre PowerShell-Skriptdatei nicht ausgeführt wird und verweist auf einen englischsprachigen Microsoft-Artikel. In der Tat ist unter Windows 10 das Ausführen von PowerShell-Skripts beschränkt. Sie können im PowerShell-Konsolenfenster zwar einzelne Befehle ausführen. Aber sobald Sie eine .ps1-Datei mit mehreren Befehlen ausführen wollen, erscheint die erwähnte Fehlermeldung.

Ausführung von PowerShell-Skripts aktivieren

Lösung: Klicken Sie auf Start, tippen Sie PowerShell ein und benutzen Sie beim gefundenen PowerShell den Befehl Als Administrator ausführen. Die PowerShell erscheint mit Admin-Rechten. Tippen Sie Get-ExecutionPolicy ein und drücken Sie Enter. Standardmässig erscheint «Restricted».
Die Abfrage ergibt den Wert «Restricted»
Prüfen Sie die aktuelle Einstellung der Ausführungsbestimmung
Quelle: PCtipp.ch
Generell alle Skripts zuzulassen wäre gefährlich. Es gibt aber eine Einstellung, die Ihre lokal erzeugten .ps1-Skripte zulässt und nur für aus dem Internet heruntergeladene Skripts verlangt, dass diese von einer vertrauenswürdigen Stelle signiert worden sind. Tippen Sie hierfür Folgendes in die Admin-PowerShell und drücken Sie Enter: Set-ExecutionPolicy RemoteSigned
Ändern Sie die Einstellung
Mit dieser Einstellung lassen Sie lokale .ps1-Files zu
Quelle: PCtipp.ch
Bestätigen Sie die Rückfrage mit J für Ja. Wenn Sie die Einstellung nun erneut mit Get-ExecutionPolicy prüfen, werden Sie sehen, dass auf RemoteSigned umgeschaltet ist. Falls Sie die Einstellung eines Tages auf Standard zurücksetzen wollen, verwenden Sie in einer Admin-PowerShell den Befehl: Set-ExecutionPolicy Default.



Kommentare
Avatar
Billmar
19.06.2020
Kleiner Tipp für PowerShell - Neubenutzer: "Windows PowerShell ISE" starten und dann unter Ansicht "Befehls-Add-On" und "Skriptbereich" anzeigen lassen. Happy scripting!

Avatar
edger
20.06.2020
In der letzten Zeile des Artikels heisst es: Falls Sie die Einstellung eines Tages auf Standard zurücksetzen wollen, verwenden Sie in einer Admin-PowerShell den Befehl: Get-ExecutionPolicy Default. Das muss wohl Set-ExecutionPolicy Default heissen.

Avatar
karnickel
20.06.2020
Psst, es gibt eine viel bessere Lösung. Damit habe ich voll im Griff, was ich starten lassen will. Die beschriebene Policy hat den grossen Nachteil, dass sie auf Angaben innerhalb der ps1-Datei abstützt, in welcher die Herkunft (Internet/lokal) vermerkt ist. Diese ADS kann allerdings falsch sein, weil die Datei sie durch Umkopieren verlieren kann. Die folgende Zeile kann in eine Datei meinstart.cmd eingetragen werden: [CODE]cmd.exe /c powershell.exe -executionpolicy bypass -file "%~dp0\meinskript.ps1"[/CODE] Danach kann sie also per meinstart.cmd von der Kommandozeile oder als Desktop-Verknüpfung gestartet werden. Es wird damit also eine weitere Shell geöffnet (cmd.exe, vielleicht ginge es gar ohne), danach per /c der Rest der Zeile als Kommando abgesetzt. /c sorgt dafür, dass nach Beendung direkt in die CMD-Datei (also meinstart.cmd) zurückgewechselt wird. Nun wird also powershell.exe mit der Option -executionpolicy bypass gestartet. Dies bewirkt genau, was im Artikel mit Set-ExecutionPolicy auch gemacht wird - nur eben genau für dieses eine Mal. Danach wird die eigentliche Powershell-Skriptdatei mit der Option -file hinterhergereicht. Dass ich die Datei mit "%dp0\ ... " verpackt habe bewirkt zum Einen, dass Pfade mit Leerzeichen in Windows sauber verarbeitet werden. %dp0 macht zusätzlich sicher, dass Windows die Datei im gleichen Ordner sucht, in dem die CMD-Datei liegt. Danach spielt es nämlich keine Rolle, von wo her die CMD gestartet wird. Eine Quelle für diesen Beitrag kann ich nicht nennen. Das habe ich mir selber so ausgedacht. Was ich aber sagen kann ist, dass PCTipp diesen Trick gerne hier auf der Website oder in den eigenen Publikationen verwenden und meine Texte unentgeldlich übernehmen darf.

Avatar
Gaby Salvisberg
22.06.2020
In der letzten Zeile des Artikels heisst es: Falls Sie die Einstellung eines Tages auf Standard zurücksetzen wollen, verwenden Sie in einer Admin-PowerShell den Befehl: Get-ExecutionPolicy Default. Das muss wohl Set-ExecutionPolicy Default heissen. Ups, stimmt! Ich gehe es gleich ändern. Danke für den Hinweis! Herzliche Grüsse Gaby

Avatar
An_Earthling
29.06.2020
Mit folgendem Befehl gehts: Powershell als Administrator starten Danach folgenden Befehl absetzen: Set-ExecutionPolicy Unrestricted