Archiv für den Monat: Dezember 2018

Visual Basic-Code in einem PowerShell-Skript ausführen

Visual Basic ist ein wenig die vergessene Programmiersprache bei Microsoft. In den 90er Jahren hatte das damals noch alte Visual Basic einen großen Anteil daran, dass sich Windows 3.0 und seine Nachfolger als Betriebssystemoberfläche so schnell verbreiten konnte. Mit der Einführung von .NET Framework im Jahr 2002 war Visual Basic als Visual Basic.NET zwar noch vertreten, das neue Visual Basic hatte aber nicht mehr viel mit dem vertrauten Visual Basic gemein. Die Folge war, dass es immer mehr auf ein Abstellgleis geriet, wenngleich die Sprache immer noch ein fester Bestandteil des .NET Framework als auch von .NET Core ist und auch weiterentwickelt wird. Auch bei .NET Core 3.0 wird VB dabei sein, auch wenn es nicht für alle Anwendungstypen eingesetzt werden kann:

https://blogs.msdn.microsoft.com/vbteam/2018/11/12/visual-basic-in-net-core-3-0/

Anders sieht es bei PowerShell Core aus. Mit der aktuellen Version 6.1 wird VB im Zusammenhang mit dem Add-Type-Cmdlet nicht mehr unterstützt. Auch wenn es nur wenige Gründe geben dürfte, in einem PowerShell-Skript Visual Basic-Code zu verwenden ist es trotzdem etwas schade, da eine Option weniger zur Auswahl steht.

Das folgende Beispiel ist daher nur für die Windows PowerShell gedacht. Es startet Word per später Bindung, lädt eine Docx-Datei und speichert sie als Pdf-Datei. Das setzt Word ab Version 2010 (?) voraus, damit diese Option überhaupt zur Verfügung steht.

17 ist der „Code“ (der Wert der Konstanten, die für das Dateiformat steht) für Pdf. Alle Pfade bitte anpassen, damit es auch funktioniert.

Kleine Tipps für Zwischendurch – Strings und Arrays per Select-String durchsuchen

Der Match-Operator ist praktisch, er gibt aber nur an, ob eine Zeichenkette in einer anderen Zeichenkette enthalten ist, die Übereinstimmung erfährt man nicht. Konkretes Beispiel: Ich wollte abfragen, ob die Path-Umgebungsvariable einen Pfad enthält, in dem ein bestimmter Name, z.B. „python“ enthalten ist.

Wenn ein

ein $true liefert bedeutet das lediglich, dass es einen Verzeichnispfad gibt, wie genau heißt erfährt man nicht.

Für diesen Zweck gibt es das vielseitige Select-String-Cmdlet, das auch ohne reguläre Ausdrücke nützlich ist.

Der folgende Befehl gibt alle Verzeichnispfade aus, in denen z.B. „python“ enthalten ist.