Die PowerShell ist ein mächtiges Werkzeug und erlaubt es uns einfache Befehle auszuführen und komplexe Skripte zu bauen. Dabei kann es vorkommen, dass man eine ausführbare Datei aufrufen muss. Wie man das macht, wird in diesem Eintrag erklärt.
Symptom
Ich möchte eine Datei ausführen, die in einem Pfad liegt, der Leerzeichen enthält. Als Beispiel hierfür habe ich die putty.exe in einem solchen Pfad abgelegt und versuche sie mit C:\Users\putty\Downloads\Achtung Leerzeichen\putty.exe auszuführen.
> C:\Users\putty\Downloads\Achtung Leerzeichen\putty.exe
C:\Users\putty\Downloads\Achtung : Die Benennung "C:\Users\putty\Downloads\Achtung" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und wiederholen Sie den Vorgang.
In Zeile:1 Zeichen:1
+ C:\Users\putty\Downloads\Achtung Leerzeichen\putty.exe
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\Users\putty\Downloads\Achtung:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Problem
Pfade sollten immer mit Anführungszeichen versehen werden. Korrigieren wir also unseren Aufruf zu "C:\Users\putty\Downloads\Achtung Leerzeichen\putty.exe"
> "C:\Users\putty\Downloads\Achtung Leerzeichen\putty.exe"
C:\Users\putty\Downloads\Achtung Leerzeichen\putty.exe
Wir haben also ein Echo unserer Eingabe erzeugt. Das ist schon mal besser als vorher. Verwenden wir nun noch den Call-Operator „&“, dann sollte es nun klappen. Wir geben also & "C:\Users\putty\Downloads\Achtung Leerzeichen\putty.exe" ein und sehen, dass sich das Programm öffnet.
Lösungstrategie
Wenn wir eine Datei ausführen wollen geben wir die Pfade in Anführungszeichen an und setzen ein & davor.