Das Megos .NET-Weblog

31. Juli 2009

Einfache Directory History für die PowerShell

Gespeichert unter: Keine Kategorie — Schlagworte: — René Brunner @ 14:07

Als ich vor einiger Zeit begann, mit der PowerShell zu arbeiten, vermisste ich eine Directory History, also eine Liste mit den zuletzt besuchten Directories und darauf basierend dann eine einfache Möglichkeit, wieder in eine dieser Directories zurückzukehren. Wie man bei Microsoft im Kapitel Managing Current Location der PowerShell-Doku sieht, gibt es zwar einen Stack mit Hilfe von Push-Location und Pop-Location, aber das ist weder automatisch noch besonders praktisch.

Per Google fand ich relativ schnell heraus, dass die PowerShell Community Extensions unter vielen anderen Dingen einen cd-Befehl enthalten, der eine History führt, aber alleine deswegen diese Extensions zu installieren erschien mir als Overkill.

Da cd nur ein Alias ist, kann man diesen Alias relativ leicht ersetzen und das Führen einer Liste besuchter Directories anhängen, wie man es z.B. hier sieht. Aber das gefiel mir auch nicht besonders, denn ich wollte mir nicht Sorgen darüber machen müssen, ob die aktuelle Directory irgendwie an dieser neuen cd-Funktion vorbei wechseln kann, z.B. durch direkte Verwendung von Set-Location in einem Script, und die History dann „Löcher“ bekommt.

Schliesslich hatte ich eine Idee, die zwar etwas hack-mässig ist, dafür aber einfach und zuverlässig funktioniert: Im Profile-Script gibt es eine Function Prompt, welche dazu da ist, wie der Name schon sagt, jeweils den Prompt am Anfang der Kommandozeile auszugeben. (Einige schöne Ideen, was man damit alles machen kann, findet man z.B. hier.) Aber wer sagt denn, dass man in diesem Script nur Ausgaben machen darf? Ebensogut kann man nebenbei beobachten, in welcher Directory man neuerdings gelandet ist, und so auf einfache Weise eine zuverlässige History führen!

10. März 2009

Die Geschichte vom Backslash

Gespeichert unter: Keine Kategorie — Schlagworte: — René Brunner @ 11:44

Ich arbeite nun schon eine ganze Weile mit der Powershell in der 2.0 CTP Version. Ich bin ganz zufrieden damit und kann eigentlich jedem nur empfehlen, sie einmal auszuprobieren.

Lustig ist, was mir mittlerweile am besten daran gefällt und worauf ich nicht mehr verzichten möchte: Die Powershell erlaubt es mir, in Filenamen den normalen Slash „/“ anstelle des Backslash „\“ zu verwenden.

Hinter dem Backslash als Trennzeichen in Dateinamen in Windows steckt eine ganz interessante Geschichte, die ich hier erwähnen möchte für Leute, die sie noch nicht kennen, auch wenn sie wenig mit .NET zu tun hat:

DOS 1.0 war eigentlich ein von Microsoft eingekauftes Betriebssystem namens QDOS, das in vielen Aspekten grosse Ähnlichkeit hatte mit CP/M. CP/M war ein Betriebssystem, das nur Laufwerksbuchstaben und Dateinamen, aber keine Ordner bzw. Subdirectories kannte. Für die Schalter bzw. Switches seiner Tools verwendete es den normalen Slash „/“ als Einleitungszeichen – eine Konvention, welche DOS 1.0 übernahm.

Als dann DOS 2.0 eine anständige hierarchische Dateiverwaltung bekommen sollte, war die von UNIX her naheliegende Verwendung von „/“ für die Dateinamen durch eben diese Verwendung für Schalter gewissermassen blockiert, worauf Microsoft auf das Nächstbeste d.h. auf den Backslash auswich.

Rückblickend kann man wohl sagen, dass Microsoft damals in den sauren Apfel hätte beissen und trotzdem den Slash verwenden sollen, auch wenn dies bedeutet hätte, eine Menge eigener und fremder Kommandozeilen-basierter Programme anpassen zu müssen.

Es gibt bei der Geschichte vom Backslash jede Menge Details, wie etwa das folgende: Die Microsoft-Programmierer selbst waren durch die Verwendung von XENIX, der damaligen Microsoft’schen UNIX-Variante, bereits an den Slash gewohnt und fanden den Backslash gar nicht lustig. Sie programmierten deshalb eine „geheime“ Option namens SWITCHAR für die CONFIG.SYS, mit der man das Zeichen für Schalter auf ein anderes Zeichen als „/“ umdefinieren konnte, wonach der normale Slash in Dateinamen zulässig wurde.

(Ich bin schon so lange im Geschäft, dass ich diese Option selbst noch verwendet habe, auf einem WANG PC; ich frage mich jetzt nur, wie ich eigentlich davon erfahren hatte damals…)

Eine ausführliche Version der Geschichte findet man hier, die Geschichte des Zeichens „\“ selbst hier.

Windows akzeptiert übrigens in Filenamen bis heute sowohl Backslash wie auch Slash, auch wenn es bei Aufbereitungen und Abfragen von Dateinamen konsequent auf Backslash wandelt. Folgende .NET/C#-Zeile ist vollkommen ok und funktioniert:

      FileInfo f = new FileInfo("C:/Work/Backslash/Program.cs");

Bloggen Sie auf WordPress.com.