• Start
  • Über
  • Blog
  • Kontakt

DiszipLean

Lean in Produktion und Dienstleistung. Tipps, Werkzeuge und Vorlagen

Weil es einfach besser ist.

PowerShell und Leerzeichen. Es startet nicht? So klappts. Mit einer Verknüpfung und Parametern

23. März 2015 von Roman Ungern-Sternberg

PowerShell Muschel

Die PowerShell Konsole öffnet sich für einen kurzen Augenblick, es huschen rote Fehlermeldungen über den Bildschirm. Doch bevor man diese erkennen kann, ist das Fenster schon wieder verschwunden. Häufig liegt dies an Leerzeichen im Pfad. In diesem Beitrag möchte ich zeigen, wie man das Problem lösen kann und PowerShell trotz Leerzeichen verwenden.

Dieser Artikel ist Teil der Serie Lean und Standardsoftware. Es geht um den besseren Einsatz von vorhandener Software in einer typischen Büro-/Produktionsumgebung. Heute nochmals: PowerShell. Der ein oder andere wird sich Fragen, was das alles mit Lean zu tun hat? Bei Lean geht es doch viel um die Menschen und nicht so sehr um die Techniken? Das ist vollkommen richtig und ich sehe das genauso. Leider findet man zu der technischen Umsetzung von schlanken Lösungen in Unternehmen im Internet recht wenig, daher diese Serie. Die Technik soll einfach sein, damit man sich um das Wesentliche kümmern kann. Doch nun zurück zur PowerShell:

Das Problem: Leerzeichen im Pfad

In der ISE(Integrated Scripting Environment) lässt sich das folgende Skript ohne Probleme ausführen, will man das selbe Skript per Doppelklick starten klappt es nicht:

powershell-ise-Leerzeichen

Häufige Ursache dafür sind Leerzeichen im Pfad, bzw. im Skriptnamen.

Der Pfad: C:\Test\Skript_ohne_Leerzeichen.ps1 lässt sich auch per Doppelklick ausführen.

Bei: C:\Test\Skript mit Leerzeichen.ps1 oder C:\Ordner mit Leerzeichen\Skript.ps1 gibt es Fehlermeldungen.

Sind keine Leerzeichen im Pfad, und es läuft trotzdem nicht? Dann helfen vielleicht diese Tipps um PowerShell zum Laufen zu bringen. Die Leerzeichenproblematik scheint ein Bug zu sein. Hier drei Methoden um das Problem zu lösen bzw. zum umgehen.

1. Lösung: Leerzeichen entfernen

Klingt trivial ist aber oft eine einfache und schnelle Methode. Ersetzen Sie alle Leerzeichen im Pfad durch ein anderes Zeichen, zum Beispiel den Unter- bzw. Bindestricht(_ oder -).

Also wird C:\Ordner mit Leerzeichen\Skript mit Leerzeichen.ps1 umbenannt zu C:\Ordner_mit­_Leerzeichen\Skript-mit-Leerzeichen.ps1

2. Lösung: Registry Eintrag ändern

Wie erwähnt liegt das Problem an einem fehlerhaften Registry Eintrag. Durch bearbeiten der Registry lässt sich dies beheben (Danke an Daniel Schroeder für die Anleitung). Achtung: Dazu benötigen Sie Administrator-Rechte.

Öffnen Sie den Registry Editor: Windows-Taste + R drücken (Das Ausführen Fenster erscheint), regedit eingeben und OK klicken:

run-regedit

Navigieren Sie im Registry Editor zu: HKEY_CLASSES_ROOT\Applications\powershell.exe\shell\open\command

Registry-Eintrag-PowerShell-Leerzeichen

Der Wert muss von: "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "%1"

Geändert werden zu:  "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "& \"%1\""

Vorteil dieser Methode: Es muss nur einmal gemacht werden und alle Skripte laufen. Man muss nicht jedes mal daran denken.

Nachteil: Muss auf jedem PC gemacht werden, auf dem die Skripte laufen sollen. Hat man keine Administrator Rechte lässt sich die Registry nicht ändern.

3. Lösung: Wrapper Scripts als .ps1 oder .bat

Die in der Verknüpfung eingegebenen Parameter lassen sich auch über ein Wrapper Skript starten. Das ist ein Skript um das eigentliche Skript zu starten. (Achtung. Das Wrapper Script darf natürlich keine Leerzeichen enthalten.)

Dieses Skript kann eine PowerShell oder auch Batch Datei sein. Besonders die Kommandozeile ist nicht so elegant, da man sich dann zusätzlich mit einer weiteren Syntax beschäftigen muss.

Meiner Meinung nach haben die Wrapper Skripts gegenüber den Verknüpfungen nur Nachteile, daher werden sie hier nicht ausführlich erwähnt. Wer mehr erfahren will, kann das in einem Thread im Microsoft TechNet nachlesen.

4. Lösung: Eine Verknüpfung (mit Parametern) anlegen. Mein Tipp.

Danke an Stefan Macke für die Hinweise. Diese Methode eignet sich vor allem für Skripte, die mit Parametern und Übergaben gesteuert werden können.

Man kann eine Verknüpfung auf das Skript anlegen, das hat mehrere Vorteile:

  • Das Skript muss nicht umbenannt werden.
  • Es können direkt Parameter mit übergeben werden.
  • Der Verknüpfung kann ein Hilfetext bzw. eine Beschreibung hinzugefügt werden.
  • Man benötigt keine Admin-Rechte.

Wird das Skript später umbenannt muss natürlich die Verknüpfung angepasst werden.

1. PowerShell Verknüpfung anlegen

Im Ordner, in dem die Verknüpfung angelegt werden soll macht man einen Rechtsklick: Neu >> Verknüpfung

Verknuepfung_erstellen

Als Speicherort geben Sie den Pfad zu PowerShell.exe an:

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe

Verknuepfung_Einstellungen

 

Zum Schluss kann der Verknüpfung noch ein Name gegeben werden.

Verknuepfung_Einstellungen2

Mouseover Hinweise lassen sich über Rechtsklick >> Eigenschaften einfügen:

MouseOver_Kommentar_PS

2. Das Ziel Feld. Mit Parametern und -NoExit

Das vorgestellte Muster lässt sich auf alle Skripte mit oder ohne Leerzeichen und mit oder ohne Parameter anwenden.

Machen Sie einen Rechtsklick auf die soeben angelegte Verknüpfung und wählen Sie Eigenschaften. Im Feld Ziel tragen Sie den Skriptaufruf ein. Ein Beispiel:

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -NoExit & '.\Skript mit Leerzeichen.ps1' -Alter 23 -Name 'Müller Mäxchen'

Schauen wir das Beispiel im Detail an.

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe ruft die PowerShell auf. -NoExit hält das Fenster nach der Ausführung offen. Das kaufmännische Und &  ist der Operator um ein Skript aufzurufen. Alternativ kann auch ein Punkt  .   verwendet werden.

Der Pfad zum Skript '.\Skript mit Leerzeichen.ps1' folgt in Anführungszeichen mit vorangestelltem Punkt und Backslash. Alternativ der absolute Pfad ohne vorangestellten Punkt, z.B. 'C:\Temp\Skript_ohne_Leerzeichen.ps1'

Gefolgt wird der Skriptname von Paramtern. Zuerst der  Parametername mit vorangestelltem Bindestrich – gefolgt von einem Leerzeichen und anschließend dem zu übergebenen Wert. Handelt es sich bei dem Wert um einen String mit Leerzeichen muss dieser auch in Anführungszeichen übergeben werden: -Alter 23 -Name 'Müller Mäxchen'

2.1 Absolute Verknüpfung zum Skript

Bedeutet, dass der komplette Pfad zum Skript angegeben wird. Das macht Sinn, wenn das Skript an einem ganz anderen Ort liegt, bzw. nichts mit der Verknüpfung zu tun haben.

Beispiel: Das Script liegt auf einem Serverlaufwerk und die Verlinkung auf dem Desktop (oder dort wo der Benutzer sie hingeschoben hat).

Eine relative Verknüpfung müsste nach jedem Verschieben angepasst werden, eine absolute nicht.

Ein Beispiel mit Parametern und dem -NoExit Flag:

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -NoExit ". 'C:\Temp\Skript_ohne_Leerzeichen.ps1' -Alter 23 -Name Müller"

2.2 Relative Verknüpfung zum Skript

Die Verknüpfung ist relativ zum Skript. D.h. wird ein Ordner im Pfad umbenannt, passiert nichts. Eine elegante Lösung, vor allem wenn Skript und Verlinkungen (z.B. mit unterschiedlichen Parametern) in einem Ordner liegen.

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -NoExit ". '.\..\Skript_ohne_Leerzeichen.ps1' -Alter 23 -Name Müller"

Interessant ist hier der Beginn mit den vielen Punkten. Die Verlinkung liegt in einem Unterordner und ruft das Skript im übergeordneten Ordner auf ('.\..\Skript_ohne_Leerzeichen.ps1'). In den übergeordneten Ordner gelangt man durch die zwei Punkte ..

3. Das Ausführen in Feld in der Verknüpfung

Dieses Feld bestimmt den Startpfad, also das Verzeichnis in dem PowerShell startet. Wichtig wird dies für Skripte die relativ zu diesem Pfad arbeiten und z.B. Dateien in diesem Ordner verschieben, etc. Standardmäßig ist der Startpfad %HOMEDRIVE%%HOMEPATH% das entspricht: C:\User\<IhrBenutzername>

Die Standardeinstellung:

PS_Verknuepfung-Settings

öffnet die PowerShell in Ihrem Benutzerverzeichnis:

PS-Standard-Pfad

3.1 Start im aktuellen Verzeichnis

Soll der Startpfad dem aktuellen Verzeichnis(in dem die Verlinkung liegt) entsprechen, löschen Sie den Text aus dem Feld Ausführen in:

PS_Relativer_Startpfad

PowerShell wird in dem Verzeichnis ausgeführt aus welchem aufgerufen wurde:

Relativer_Start_PowerShell

3.2 Absoluter Startpfad

Einen absoluten Pfad tragen Sie ganz einfach dort ein.

Verlinkung-Absoluter-Startpfad

4. PowerShell Fenster offen halten mit -NoExit

Oft soll das Fenster nach Ende des Programms offen gehalten werden.

Nutzen Sie das –NoExit Flag in der Verknüpfung um ein PowerShell Fenster offen zu halten:

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -NoExit . 'C:\Temp\Skript mit Leerzeichen.ps1'

Alternativ können Sie das Skript auch mit einer Abfrage die auf eine Eingabe wartet offen gehalten werden: Read-Host "Hit <Enter> to close"  allerdings wird es dann schwierig, das Skript automatisiert einzusetzen. Es wird immer auf die Benutzereingabe gewartet. Daher ist –NoExit wesentlich eleganter.

Fazit

Um das Problem zu lösen ist die Änderung der Registry am elegantesten. Weiterhin kann man Verknüpfungen ganz ohne Admin-Rechte nutzen um Parameter und Startverzeichnis zu übergeben.

P.S. Alle gezeigten Beispiele versehen sich ohne jegliche Garantie. Sie wenden die hier gezeigten Ideen auf eigenes Risiko(Datenverlust, etc.) an.

Der Artikel war hilfreich? Dann hinterlassen Sie bitte einen kurzen Kommentar.

Bildquelle: Pixabay

Filed Under: Allgemein

Keinen Artikel zur aktuellen Kanban Serie verpassen?

Tragen Sie sich in den Newsletter ein und Sie bekommen
- eine komplette Einkaufsliste für ein Büromaterial-Kanban
- Layoutvorlagen und Software für den Druck
- mehr Tipps zu Lean Techniken

Spam ist blöd. Mit einem Klick sind Sie wieder draußen!

Disziplean, was soll das?

Ein Blog über Verbesserungen in der Industrie und Produktion? Mit Vorlagen und Tipps zu Lean?
Das ist doch verrückt!

Lust auf mehr zum Thema Lean und OpEx?

Am einfachsten vernetzen wir uns bei LinkedIN.

Ich freue mich über Ihre Kontaktanfrage!

Impressum | Datenschutz

Beliebteste Artikel

  • PowerShell und Leerzeichen. Es startet nicht? So klappts. Mit einer Verknüpfung und Parametern
  • Dafür ist Excel einfach nicht gemacht
  • PowerShell läuft nicht? Mit diesen 5 Tricks schon
  • Poka Yoke Beispiele – auch beim Geldabheben
  • Visio ist zu teuer? Dann schauen Sie sich diese kostenlose Alternative an
  • Eigene Datengrafiken erstellen mit Visio & Excel
  • Mit 10 Regeln zum perfekten Wertstromdesign

Suche

© 2014 - 2025 Roman Ungern-Sternberg · Alle Rechte vorbehalten · Impressum · Datenschutz