Das Konsolen-Fenster geht nur kurz auf und verschwindet wieder, Execution Policy Fehler, Leerzeichen im Pfad oder eine nicht deklarierte Variable? Es gibt viele Gründe warum PowerShell nicht so funktioniert, wie es sollte.
Der Artikel ist Teil der Serie Lean Automation und hier die fünf besten Tricks um PowerShell zum Laufen zu bringen.
1. PowerShell Execution Policy. PowerShell läuft, aber Skripte lassen sich nicht aufrufen
Ihnen kommen Fehlermeldungen zur falschen Execution Policy bekannt vor?
Problem: Die Execution Policy verhindert das Ausführen des Skripts.
Lösung: Ändern Sie die Rechte. Eine gute Beschreibung(so dass ich sie hier nicht nochmals wiederhole) zu Set-Execution Policy finden Sie bei WindowsIt Pro. Achtung: Man braucht Admin Rechte dazu.
2. Programm läuft in der ISE, nach einem Neustart aber nicht mehr?
Sie haben ein Skript entwickelt und dieses läuft in der Entwicklungsumgebung(PowerShell ISE), nach einem Neustart tauchen jedoch viele Fehler auf. Zwei häufige Ursachen sind:
2.1 Nicht mehr vorhandene Variablen
Beispiel: Sie haben Variablen z.B. per Eingabezeile Werte zugewiesen. Hier das Skript:
In diesem Beispiel wird der Variablen $a
ein Wert per Eingabezeile zugewiesen und dann das Skript ausgeführt. Das Funktioniert und liefert das korrekte Ergebnis „2
“ zurück:
Problem: Nach einem Neustart ist die Variable $a
nicht mehr verfügbar und das selbe Skript zeigt folgende Fehlermeldung:
Lösung: Definieren Sie alle vom Skript benötigten Variablen vor deren Verwendung direkt im Skript:
2.2 Ein neuer relativer Pfad
In der Konsole sind Sie zu einem Pfad navigiert, z.B.
Set-Location C:\Users\Public\Documents
oder mit cd
Problem: Ihr Skript funktioniert bis zum Neustart einwandfrei. Dann tauchen Fehlermeldungen auf, Pfade werden nicht gefunden, etc.
Ursache: Nach einem Neustart der ISE wird der zugewiesene Pfad wieder auf den Standardpfad zurückgesetzt.
Lösung: Nutzen Sie Variablen um den Pfad zu speichern und nutzen Sie diese bei dem Aufruf von cmdlets.
$path = "C:\Temp\*"
Get-ChildItem $path
Alternativ setzen Sie den Pfad im Skript zu Beginn auf den gewünschten Ort:
3. Debugging: Probieren Sie es in der ISE
Problem: Ein Skript funktioniert nach einem Doppelklick auf das Symbol nicht. Es poppt nur kurz das Fenster auf, ein roter Text huscht vorüber und alles ist wieder weg.
Lösung: Öffnen Sie das Skript in einer neuen Instanz der ISE. Und führen Sie es mit F5 bzw. einem Klick auf Ausführen aus. Die ISE bleibt offen und Sie können das Skript dort wesentlich besser debuggen.
4. Das Fenster schließt sich sofort wieder. Read-Host hilft.
Problem: Nachdem das Skript ausgeführt wurde schließt es sich sofort wieder. Sie wollen allerdings, dass das Fenter offen bleibt, z.B. um eine Meldung auszugeben.
Lösung: Fragen Sie den Benutzer nach einer Eingabe. Achtung: Das Skript wird erst nach dieser Eingabe beendet. Warten andere Skripte auf das Beenden des aktuellen Skripts, sollten Sie diese Methode nicht verwenden. Nutzen Sie dann besser das -NoExit Flag beim Start der PowerShell.. Wie das geht lesen Sie im nächsten Beitrag.
5. Skript verschoben/umbenannt, jetzt geht es nicht mehr. Wohl ein Leerzeichen im Pfad
Sie haben ein Skript, das funktionierte auch prima. Bis Sie es verschoben oder umbenannt haben. Das Fenster blinkt auf und weg ist es.
Problem: Sie haben vermutlich ein Leerzeichen im Pfad, damit hat PowerShell ein paar Probleme.
Lösung: Nutzen Sie eine Verknüpfung für den Start des Skripts. Wie dies genau geht, lesen Sie auch im nächsten Beitrag.
Extra-Tipp für Windows 8.1: PowerShell im Startmenü statt der CMD
Danke für den Tipp an Lifehacker.com. Ab Windows 8.1 gibt es wieder ein Startmenü. Dies erreicht man mit einem Rechtsklick auf den Windows Button oder über Tastenkombination Windows + X. Anstelle der Kommandozeile kann in dem Startmenü direkt die PowerShell aufgeführt werden:
Dazu einen Rechtsklick auf eine freie Stelle auf der Tastkleiste. Dort wählt man Einstellungen… und setzt den korrekten Haken:
Ich hoffe der Beitrag konnte beim dem ein oder anderen PowerShell Problem helfen? Hinterlassen Sie doch einen Kommentar.