Archiv für den Monat: November 2017

PowerShell unter Linux installieren – bei einem traditionellen Provider als Alternative zu einer Azure-VM

Die PowerShell unter Linux zu installieren macht inzwischen richtig Spaß und setzt dank einer nahezu idiotensicheren Anleitung für die wichtigsten Linux-Disributionen unter https://github.com/PowerShell/PowerShell auch keinerlei Linux- oder Bash-Kenntnisse voraus. Ein wenig PowerShell-Kenntnisse genügen;)

Auch wenn es naheliegend ist, die Linux VM unter Azure anzulegen, diese Variante besitzt einen Nachteil, der sich mal mehr oder weniger auswirkt: Azure ist aus meiner Sicht relativ teuer. Eine einfache Linux-VM mit 2 Core CPU und 3.5 GB RAM kostet ca. 50€ pro Monat. Natürlich gibt es preiswertere Varianten, aber das Arbeiten soll ja auch etwas Spaß machen. Deutlich preiswerter sind die meisten traditionellen Provider. Hier gibt es eine virtuellen Linux-Server mit vollen Root-Rechten ab 9.99€ (etwa bei Host Europe, bei dem ich z.B. diesen Blog hoste).

Wer jahrelang den Komfort von Azure gewöhnt war, muss bei einem traditionellen Provider erst einmal umdenken. Man bestellt den Server, bekommt kurz danach die Auftragsbestätigung, muss dann einen Auftrag zur Startkonfiguration starten und bekommen dann etwas später die Zugangsdaten (eine gewisse Überraschung war es, dass es aufgrund interner Hardwareprobleme ein paar Tage gedauert hat – dies ist zwar die absolute Ausnahme, kann aber offenbar passieren).

Sobald man die Zugangsdaten in Gestalt einer IP-Adresse und einem generierten Kennwort für das root-Konto erhalten hat, geht es genauso weiter wie bei einer Azure-VM. Als SSH-Client verwende ich seit kurzem das hervorragende MobaXTerm (https://mobaxterm.mobatek.net).

Eine Besonderheit ist noch erwähnenswert: Auf einem nackten Linux-System fehlt am Anfang einiges, u.a. auch curl und das Package für den Download via HTTPS. Beide Packages müssen per apt-get install nachinstalliert werden:

Anschließend wird die PowerShell nach Anleitung installiert. Der Programmname lautet neuerdings pwsh und nicht mehr „powershell“.

Aktuell (Stand: November 2017) ist immer noch die Beta-9. Ich bin gespannt, ob die Version 1.0, wie es auf der PowerShell-Konferenz in Hannover im Mai angedeutet wurde, tatsächlich noch in diesem Jahr kommt.

PowerShell Core in einer Asp.Net Core-Anwendung hosten – die ersten Schritte

Gleich vorweg: Dies ist noch kein vollständiger Blog-Eintrag, es sind vielmehr nur mehr oder weniger zusammenhanglose Notizen, die allen weiterhelfen sollen, die an einem ähnlichen Projekt arbeiten und mir als eine Art „Notizzettel“ dienen sollen.

*** Letzte Aktualisierung: 11/11/2017 ***

Ich will in den nächsten Wochen ein umfangreicheres PowerShell-Skript über einen Websevice anbieten. Technisch ist das sehr einfach, wenn das Projekt auf ASP.NET basiert. Ich möchte das Projekt aber nur unter Asp.Net Core umsetzen, damit es theoretisch auch in einem Container unter Linux laufen kann. Warum nicht, auch wenn es für das Projekt im Moment keine konkreten Vorteile bietet?

Die Herausforderung besteht darin, dass PowerShell Core noch nicht immer nicht offiziell ist und es daher noch keine offiziellen Packages gibt. Ein Pendant zu System.Management.Automation ist das PowerShell Core SDK.

Einen guten Einstieg in die etwas komplizierte Thematik gibt der folgende Artikel:

https://github.com/PowerShell/PowerShell/tree/master/docs/host-powershell#net-core-sample-application

Im Folgenden beschreibe ich die Umsetzung des Projekts.

Ausgangspunkt ist ein leeres Verzeichnis. Vorausgesetzt werden VisuaL Studio Code (mit Visual Studio 2017 Community Edition ginge es zwar leichter, aber es soll ja nicht zu leicht sein) und die neueste Version des .NET Core SDKs, z.B. 2.02.

Die Downloaadresse ist https://www.microsoft.com/net/learn/get-started/windows

Schritt 1: Anlegen eines ASP.NET Core-Projekts vom Typ WebApi

Schritt 2:: Hinzufügen des PowerShell Core SDK-Package

*** Fortsetzung folgt ***

Nächstes Treffen der PowerShell User Group Stuttgart und Umgebung am 30.11.2017 Globalways/Gropiusplatz 2

Es gibt sie noch, die PowwerShell User Group Stuttgart, auch wenn es die letzten Monate eventuell etwas ruhig war um sie bzw. Facebook und Webseite nicht auf dem aktuellen Stand sind.

Und wann ist das nächste Treffen? Ganz einfach, bis auf Weiteres immer am letzten Donnerstag eines Monats. Wo erfahre ich mehr? Immer auf Meetup, also unter

https://www.meetup.com/de-DE/PowerShell-Usergroup-Stuttgart/

Eingeladen ist jeder, der sich für die PowerShell als ein enorm vielseitiges einsetzbares Werkzeug für die Adminstration unter Windows und neuerdings auch Linux interessiert.

Praxistipp: .NET Vesionsnummern auslesen mit einem Tool und einer Prise Regex

Es gibt mehrere Alternativen, um die Versionsnummern aller instlalierten .NET-Versionen zu erhalten. Meine „Lieblingsvariante“ ist immer noch ein kleines Tool mit dem Namen .NET Version Detector von einem belgischen Entwickler mit dem leicht zu merkenden Domännamen asoft.be:

http://www.asoft.be/prod_netver.html

Das kleine Tool zeigt alle vorhandenen Versionen nicht nur in einem Fenster an, sondern schreibt sie wenn das Tool in der Befehlszeile aufgerufen wird auch in eine Textdatei.

Mit einer Prise Regex erhält man die Versionsnummern zurück.

PowerShell-Praxis: Umgang mit mehrdimensionalen Arrays – ein „Schiffe versenken“-Algorithmus

Der Umgang mit Arrays besitzt bei der PowerShell seine Eigenheiten. Auf der seinen Seite genial einfach und komfortabel, doch sobald es um mehrdimensionale Arrays geht lässt der Komfort etwas nach und es wird speziell.

Eines gleich vorweg: Wer bislang eine Programmiersprache oder eine traditionelle Skriptsprache wie VBScript (WSH) verwendet hat und es einfach gewohnt ist mit zweidimensionalen Arrays zu arbeiten, z.B. um tabellarische Daten abbilden zu können: In 95% alle Fälle ist ein simples Array, das per [PSCustonmObject] angelegte Werte aufnimmt, die beliebige Werte aufnehmen, die deutlich einfachere und vor allem Powershell-typische Variante.

Da man aber niemand zwingend sollte, eine vertraut gewordene Gewohnheit aufgeben zu müssen, lassen sich zwei- oder mehrdimensionale Arrays auch bei PowerShell anlegen. Zwei Dinge muss man wissen: Wie ein mehrdimensionales Array angelegt und wie ein mehrdimensionales Array von einer Function zurückgegeben wird.

Mehrdimensionale Arrays anlegen


Ein mehrdimensionales Array wird per New-Object-Cmdlet angelegt. Da das Cmdlet offenbar mit der [,]-Schreibweise nicht klar kommt, muss die Typbezeichnung in Apostrophen gesetzt werden – dadurch fallen aber die äußeren eckigen Klammern weg.

Der folgende Befehl legt ein zweidimensionales Array mit 10 Feldern in der ersten und 2 Feldern in der zweiten Dimension an.

Der folgende Befehl legt ein dreidimensionales Array mit 2 Feldern in jeder Dimension an.

Die Rank-Eigenschaft gibt die Anzahl der Dimensionen an. Per GetLength-Methode erhält man die Größe einer einzelnen Dimension.

Ein mehrdimensionale Array in einer Function zurückgeben


Soll eine Function ein mehrdimensionale Array zurückgeben, muss dem Ausdruck bzw. der Variablen einfach ein Komma vorangestellt werden.

Ein Algorithmus für das Belegen eines Schiffe versenken-Spielfeldes

Ein genialer Algorithmus, der ein zweidimensionales Feld für ein Schiffe versenken-Spiel mit Schiffen belegt und dabei darauf achtet, dass sich keine „Verbände“ überlappen bzw. die Spielfeldgrenzen berücksichtigt werden.

Eine Erklärung folgt in Kürze – bei Fragen einfach fragen;)