Http.sys Url Reservierungen per PowerShell und ein wenig „String-Vodoo“ löschen

Eine URL-Reservierung ist eine vorgegebene URL-Schreibweise, die z.B. für den Aufruf eines Webservice verwendet wird. URL-Servierungen spielen z.B. beim Aufruf eines WCF-Dienstes per HTTP/HTTPS eine Rolle. Möchte ich einen WCF-Dienst nicht über Port 80, sondern z.B. über Port 88 aufrufen, muss zuvor eine URL-Reservierung angelegt werden. Soll der Dienst per HTTPS aufrufbar sein, muss eine SSL-Bindung angelegt werden. Beides wird offiziell per Netsh durchgeführt.

Zu den wenigen Bereichen, für die es aktuell (Stand: Oktober 2017) nur wenige PowerShell-Commands gibt, gehören die Kommandos der Netsh-Shell. Ein Auflisten aller URL-Reservierungen geschieht per

Die Textausgabe ist relativ umfangreich und vor allem nicht sehr regelmäßig strukturiert. Grundsätzlich sollte man auch ohne einen Doktor in „Regex-Kunde“ zu haben, das Zerlegen des Ausgabetextes per Select-String, dem Match-Operator oder per [Regex] hinbekommen, da es lediglich darum geht, eine bestimmte Zeile herauszufischen.

Ein weniger einfacher und vor allem ganz ohne Regex-Zauber geht es unter Umständen mit dem mit der Version 5.0 eingeführten ConvertFrom-String-Cmdlet, wenngleich die folgende kleine Lösung auch nicht perfekt ist. Die Idee ist, dass der zu konvertierende Text anhand eines Musters in seine Bestandteile zerlegt wird. Das Muster besteht aus der ersten Zeilen des zu konvertierenden Textes, in dem die zu extrahierenden Bereiche einfach in geschweifte Klammern gesetzt werden. In dem in den geschweiften Klammern jeweils ein Name angegeben wird, kann der extrahierte Text später über diesen Namen angesprochen werden. Bei sich wiederholenden Bereichen folgt auf den Namen noch ein *.

Im Idealfall liefert ConvertFrom-String pro Übereinstimmung ein Objekt, bei dem der über eine Markierung markierte Text über die Eigenschaft geliert wird, die dem Namen der Markierung entspricht.

Das folgende Beispiel zerlegt den Output von netsh urlacl nach den Http-Adressen und löscht jede Reservierung. Vorsicht: Die Reservierungen werden tatsächlich gelöscht. Die Nutzung erfolgt daher auf eigenes Risiko.

Das kleine Beispiel versteht sich in erster Linie als Anschauungsbeispiel für das enorm leistungsfähige, leider aber auch immer noch recht kryptische wirkende ConvertFrom-String-Cmdlet.

Wer nur eine komfortable Möglichkeit sucht, URL-Reservierungen und SSL-Bindungen zu löschen ohne die Befehlszeile bemühen zu müssen, sollte den praktischen Http.sys-Manager von Nicolas Dorier verwenden:

https://www.codeproject.com/Articles/437733/Demystify-http-sys-with-HttpSysManager
bzw.

http://httpsysmanager.codeplex.com/

Das kleine WPF-Tool verwendet .NET-Klassen aus dem Namespace HttpSysManager.Core und HttpSysManager.Native. Theoretisch ließen sich die Klassen direkt in einem PowerShell-Skript verwenden. Wer also viel Zeit hat, kann sich in dieser Nische einen Namen machen, den ein PowerShell-Command scheint es noch nicht zu geben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.