Alle Beiträge von Don Matteo

lebt in der Schweiz, ist System Engineer MCP bei A-Enterprise GmbH. Mitglied des UNBLOG Knowledge Network. Author und Blogger zu den Themen, Tutorials für Linux und Open Source.

PowerShell 7 Installation

PowerShell 7 unter Windows 10 Installation und Anwendung

Microsoft hat PowerShell 7.0 am 4. März 2020 angekündigt. Es ist das neuste wichtige Update für PowerShell, die plattformübergreifende Befehlszeilen-Shell und Skriptsprache von Microsoft. In diesem Beitrag wird aufgezeigt, was neu ist, und wie sich PowerShell 7 auf einem Windows 10 Computer installieren lässt.

PowerShell 7 – so wird’s gemacht

PowerShell 7 ist für Windows, MacOS und Linux verfügbar. Auf Github ist die Release Übersicht, hier geht es mit Klick auf ein Release zum Download, es sind die Pakete für die entsprechende Betriebssystem und Rechnerarchitektur aufgeführt. Das PowerShell MSI-Paket für Windows 64 bit herunterladen, und mit einem doppelklick den Setup-Assistenten starten.

Hinweis: PowerShell 7 wird neben Windows PowerShell 5.1 – das mit Windows 10 ausgeliefert wird – installiert und ausgeführt, und ersetzt PowerShell Core 6.x. Wer PowerShell 6 neben PowerShell 7 ausführen möchte, muss dieses nachträglich über das ZIP-Paket erneut installieren.

  Die Windows PowerShell Version abfragen.
$PSVersionTable
Get-Host

Was ist neu in PowerShell 7

Die neueste Version, PowerShell 7 baut auf dem vorherigen PowerShell Core 6.1 auf. Es unterstützt weiterhin die plattformübergreifende Bereitstellung und fügt eine Reihe neuer Funktionen, Cmdlets und Fehlerkorrekturen hinzu. Einige der wichtigsten neuen Funktionen sind:

  • Pipeline-Parallelisierung mit ForEach-Object: Durchlaufen von Elemente einer Sammlung parallel zum neuen Parameter -Parallel oder druch anlegen mit Parameter einer maximale Thread-Anzahl (Standardeinstellung ist fünf) fest -ThrottleLimit.
  • Das Hinzufügen neuer Operatoren:
    • Ternärer Operator “? : ”: Funktioniert ähnlich wie eine if-else-Anweisung, indem zwei Ausdrücke mit einer Bedingung verglichen werden, um festzustellen, ob sie wahr oder falsch ist,
      z. Test-Path „C:\Users“ ? „exists“ : „does not exist“
    • Pipeline-Kettenbetreiber „||“ und „&&“: Der Operator && führt die rechte Pipeline aus, wenn die linke Pipeline erfolgreich war. Umgekehrt ist die || Der Operator führt die rechte Pipeline nur aus, wenn die linke Pipeline ausfällt.
  • Get-Error Cmdlet: Eine vereinfachte und dynamische Fehleransicht zur einfacheren Untersuchung des letzten Fehlers in der aktuellen Sitzung.
  • Automatische Benachrichtigungen neuer Versionen: Benutzer Benachrichtigen, wenn eine neue Version von PowerShell verfügbar ist. Das Standardupdate sucht einmal täglich nach einer neuen Version.

Wer mit PowerShell im Windows Terminal arbeitet, kann den folgenden Abschnitt zur Terminal Einstellung, in die Datei settings.json einfügen.

        {
            "guid" : "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
            "name" : "PowerShell 7.0",
            "tabTitle" : "PowerShell 7.0",
            "source" : "Windows.Terminal.PowershellCore",
            "colorScheme" : "Campbell Powershell",
            "fontFace" : "Consolas",
            "fontSize" : 10,
            "hidden" : false
        },

Invoke-WebRequest: Die Anfrage wurde abgebrochen

Beim Abrufen von Web-Seiten-Inhalte mit dem Cmdlet Invoke-WebRequest, kann des Öfteren ein SSL/TLS-Fehler auftreten.

Invoke-WebRequest: Die Anfrage wurde abgebrochen: Es konnte kein geschützter SSL/TLS-Kanal erstellt werden.

Passieren kann das in erster Linie mit Invoke-WebRequest, das wie die Aliase curl oder wget, Web-Seiten-Inhalte aus der Kommando­zeile herunterladen werden.

Der Grund dabei ist, dass immer öfters Webseiten das TLS-Protokoll der Version 1.0 ablehnen. Bei Windows PowerShell muss man dann, je nach Version des installierten .NET-Frameworks, TLS 1.1 / 1.2 manuell aktivieren.

Wenn PowerShell auf einer älteren Version als 4.62 des .NET-Framework genutzt wird, ist es per default TLS 1.0. Dies betrifft Windows 8.1, Server 2016 und ältere Windows 10 Versionen.

Unter Windows PowerShell 5.1 und Core 6.1 gibt es die Möglichkeit nicht, die Version des TLS-Protokolls durch Parameter festzulegen, bei PowerShell 7 lässt sich der Parameter SslProtocol anwenden.

Wenn die angerufene Webseite TLS 1.0 nicht akzeptiert, kann es bei Invoke-WebRequest zu einem Fehler kommen. Es tritt dann häufig folgender Fehler auf:

Invoke-WebRequest: Die Anfrage wurde abgebrochen: Es konnte kein geschützter SSL/TLS-Kanal erstellt werden.

Behelfen kann man sich dabei mit folgendem Aufruf.

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]'Tls11,Tls12'

Damit beschränkt man sich auf die TLS-Protokoll Versionen 1.1 und 1.2. Diese Änderung wirkt sich jedoch nur auf die aktive PowerShell Session aus, so dass man diesen Befehl jedes Mal erneut ausführen muss.

Das Problem ergibt sich jedoch nicht in Windows PowerShell 6.x oder 7, da sich die TLS-Protokoll Version für Invoke-WebRequest mit dem Parameter SslProtocol steuern lässt. Und das darunterliegende .NET Core per default eine neuere Version des Protokolls verwendet.

Fazit

Es bietet sich hiermit an, bei älteren Betriebs­systemen und der Anwendung von Invoke-WebRequest, die eine neuere TLS-Verbindung benötigen, auf Windows PowerShell 7 zu gehen.

Update

Mittlerweise ist PowerShell 7.1 erschienen. Microsoft gab das Power­Shell Release 7.1 frei, das primär Bugfixes und kleinere Änderungen enthält. Updates gibt es zudem für einige Module, darunter PSReadLine 2.1 mit einer Auto­ver­voll­ständigung auf Basis der History.

Das Update führt ein Feature namens Predictive IntelliSense ein. Es ergänzt die Autover­voll­ständigung während der Eingabe mit passenden Kommandos aus der Befehls­historie. Das Feature lässt sich anpassen, so kann etwa das Hellgrau der Schrift durch eine besser lesbare Farbe ersetzen werden. Standard­mässig ist es deaktiviert, es lässt sich über folgendes Kommando aktivieren.

PS C:\> Set-PSReadLineOption -PredictionSource History

Regenbogenfarben im Linux Terminal

Regenbogenfarben im Linux Terminal mit lolcat, cowsay und fortune

Für diejenigen, die glauben, dass die Linux Command Line langweilig ist und keinen Spaß macht, die liegen vermutlich falsch. In diesem Beitrag geht es um Linux, und fantastisch bunte Farbige Linux Terminals.

Das kleine Dienstprogramm namens „lolcat“, das im Terminal die Ausgaben in Regenbogenfarben darstellen kann, habe ich auf einer Fedora Workstation 30 und bei einem Linux Mint 20 (Ubuntu) installiert.

Was ist Lolcat ?

lolcat ist ein Dienstprogramm für Linux, BSD und OSX, das ähnlich wie der Befehl cat (Unix) funktioniert und die Ausgabe in Regenbogenfarben ausgibt. Die Anwendung /usr/bin/lolcat entspricht in etwa dem bei Unixoiden OS bekannten /usr/bin/cat, eng. concatenate (verketten). lolcat wird hauptsächlich dazu genutzt, um Textausgaben im Linux Terminal in Regenbogenfarben auszugeben. lolcat wurde ursprünglich in Ruby entwicklet, dazu gibt es Clone auf Python, und daneben auch in C von jaseg, diese vermutlich performanteste Version, ist als Binary in vielen Repository der Distributionen verfügbar.

lolcat installieren

Das einfachste ist also, lolcat direkt aus den Standard Repository zu installieren. Bei Fedora wird lolcat wie folgt installiert.

$ sudo dnf install -y lolcat

Bei Linux Mint das auf der Linux-Distribution Ubuntu basiert, ist die Bereitstellung daher wie gewohnt mit dem apt-get Paket Manager.

$ sudo apt install -y lolcat

Regenbogenfarben im Linux Terminal

Nun können Kommandozeilen Befehle in Regenbogenfarben ausgegeben werden, wie beispielsweise der Kalender.

$ cal | lolcat

Der erweiterte Kalender für das ganze Jahr ausgeben.

$ cal -y | lolcat -v 1.1 -h 0.6

Damit man bei jedem öffnen des Linux Terminals eine andere Willkommensnachricht in Form eines Zitat erhält, ähnlich wie es von MOTD bekannt ist, können folgende Zeilen in die Datei .bashrc am Ende unten eingefügt werden, mit einem Editor der wahl wie nano ~/.bashrc, oder vi ~/.bashrc

function cowsayfortune {
    NUMOFCOWS=`cowsay -l | tail -n +2 | wc -w`
    WHICHCOW=$((RANDOM%$NUMOFCOWS+1))
    THISCOW=`cowsay -l | tail -n +2 | sed -e 's/\ /\'$'\n/g' | sed $WHICHCOW'q;d'`

    #echo "Selected cow: ${THISCOW}, from ${WHICHCOW}"
    fortune | cowsay -f $THISCOW -W 100 | lolcat -v 1.1 -h 0.6
}

cowsayfortune

cowsay installieren

Dazu muss cowsay noch installiert werden, damit werden lustige Tiere oder Fabelwesen in ASCII Text in Regenbogenfarben gezeichnet, dabei die Nachricht in einer Sprechblase erscheint.

$ sudo dnf install -y cowsay

Bei Linux Mint und Ubuntu wiederum wie folgt.

$ sudo apt install -y cowsay

Auch kann beispielsweise die man Page mit Regenbogenfarben aufgefrischt werden.

$ man cowsay | lolcat
man cowsay | lolcat

Die Abfrage der Netzwerk Konfiguration wird durch farblich abgegrenzte Kontraste deutlich übersichtlicher, mit den lolcat Parameter vertical_speed (-v) und horizontal_speed (-h).

$ ip a | lolcat -v 10 -h 0
ip a | lolcat -v 10 -h 0

Einige weitere Beispiele in Regenbogenfarben im Linux Terminal mit lolcat.

$ cowsay -f kitty U Can\'t Touch This | lolcat -v 1.1 -h 0.5
cowsay -f kitty U Can\’t Touch This | lolcat -v 1.1 -h 0.5

fortune und cowsay mit lolcat

$ fortune | cowsay -f eyes | lolcat -v 2
fortune | cowsay -f eyes | lolcat -v 2
$ fortune -n long | cowsay -f dragon-and-cow | lolcat -v 1.2 -h 0.8
Abbildung: fortune -n long | cowsay -f dragon-and-cow | lolcat -v 1.2 -h 0.8
$ cowsay -f ghostbusters Look at my gist https://gist.github.com/donkey | lolcat -v 2
cowsay -f ghostbusters Look at my gist https://gist.github.com/donkey | lolcat -v 2

Herzlich Willkommen mit lolcat

$ figlet -c Herzlich Willkommen | lolcat -v 2
figlet -c Herzlich Willkommen | lolcat -v 2

Es gibt unzählige Möglichkeiten zur Anwendung von lolcat im Terminal, an dieser Stelle seien nur einige Beispiele zur Veranschaulichung gezeigt. Wie hier einige nützliche Systembefehle mit lolcat dekoriert werden.

date | lolcat
dmesg | lolcat
last | lolcat
free -m | lolcat -v 10 -h 0
sudo du -h | lolcat
tree -s | lolcat -v 2
hostnamectl | lolcat -v 2
hexdump -C ~/.bashrc | lolcat -v 10 -h 0
ip a | lolcat -v 10 -h 0
ip -4 a | lolcat -v 10 -h 0 && ip -6 a | lolcat -v 15 -h 0
route -n | lolcat -v 10 -h 0
sudo lsof -i | lolcat -v 20

Die cowsay file list und die help page, sowie die fortune Optionen.

$ cowsay -l
Cow files in /usr/share/cowsay:
beavis.zen blowfish bud-frogs bunny cheese cower default dragon dragon-and-cow elephant elephant-in-snake eyes flaming-sheep ghostbusters head-in hellokitty kiss kitty koala kosh luke-koala mech-and-cow meow milk moofasa moose mutilated ren sheep skeleton small stegosaurus stimpy supermilker surgery telebears three-eyes turkey turtle tux udder vader vader-koala www

$ cowsay -h
cow{say,think} version 3.03, (c) 1999 Tony Monroe
Usage: cowsay [-bdgpstwy] [-h] [-e eyes] [-f cowfile]
          [-l] [-n] [-T tongue] [-W wrapcolumn] [message]

$ fortune [-afilosw] [-m pattern] [-n number] [ [#%] file/directory/all]