Schlagwort-Archive: PowerShell

PowerShell ist ein plattformübergreifendes Framework und Skriptsprache von Microsoft zur Automatisierung, Konfiguration und Verwaltung von Systemen.

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.

powershell7

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.

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.

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.

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:

Behelfen kann man sich dabei mit folgendem Aufruf.

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.

Beitrag Teilen!

Public IP mit PowerShell abrufen

Invoke-WebRequest Internet IP Abfrage

Das PowerShell Cmdlet Invoke-WebRequest ist die HTTP Abfrage ab PowerShell 3.0 für das Web. Dieses Cmdlet kann jedes HTTP-Verb wie GET POST PUT HEAD CONNECT u.a.m. mit HTTP-Parameter an einen WebServer senden und als HTTP-Header ausgeben. Invoke-WebRequest und Invite-RestMethod sind auch als Aliase anwendbar, wie diese von Unixoiden Systeme mit curl und wget bekannten sind.

Invoke-WebRequest sendet HTTP- und HTTPS-Anforderungen an eine Webseite auf einem WebServer. Es analysiert die Antwort und gibt Sammlungen von Links, Bildern und andere wichtige HTML-Elemente zurück.

Invoke-WebRequest kann beispielsweise in der PowerShell die eigene Public IP zurückgeben diese der Router vom ISP erhalten hat.

Die HTTP-Header RAW Status Ausgabe mit Invoke-WebRequest.

Wird folgender Fehler ausgegeben, muss der Internet-Explorer gestartet werden, oder mit Parameter UseBasicParsing ausführen.

Invoke-WebRequest : Der Antwortinhalt kann nicht analysiert werden, da das Internet Explorer-Modul nicht verfügbar ist, oder die Konfiguration beim ersten Start von Internet Explorer ist nicht abgeschlossen. Geben Sie den UseBasicParsing-Parameter an, und wiederholen Sie den Vorgang.

Die HTTP-Headers Ausgabe von Invoke-WebRequest alias curl.

Links von einer Webseite Abrufen

In diesem Beispiel werden die Links einer Webseite ausgegeben. Das Cmdlet ermöglicht den Inhalt einer Webseite mit den Links (href) zurückzugeben.

Senden einer Formulardatendatei

In diesem Beispiel wird das Aktualisieren eines Benutzerprofils veranschaulicht. multipart/form-data.

Das Profilformular erfordert die Felder kommagetrennt wie folgt: , , , , u.s.w. Die API erwartet, dass ein Bild für das Benutzerprofilbild im Feld bereitgestellt wird. Die API akzeptiert auch mehrere Einträge, die im gleichen Formular übermittelt werden sollen. firstName lastName email avatar birthday hobbies.

Beitrag Teilen!

Computer Seriennummer Abfragen

BIOS und Seriennummer ermitteln

Die Seriennummer kann nützlich sein, um Computerhardware für Inventurzwecke zu identifizieren, die oft auf einem kleinen Aufkleber auf der Rückseite des Geräts steht. Wir können diese Seriennummer auch aus der BIOS-Konfiguration erhalten. Hierzu kann die Windows Management Instrumentation (WMI)-Klasse Win32_Bios genutzt werden.

Die Seriennummer gibt ebenso Aufschluss über den Status der Herstellergarantie. Wie es bei HPE die Produktgarantie-Prüfung gibt, oder bei Lenovo auf der Support-Webseite es möglich ist. Die BIOS-Version und Seriennummer um den Computer zu identifizieren, bei der Suche nach Software-Updates und passenden Treiber bei den Herstellerwebseiten.

Die Abfrage der Seriennummer mittels WMI-Klasse Win32_Bios aus dem Command Prompt:

Im Command Prompt gibt folgender Befehl die Ausgabe der BIOS-Version:

In der PowerShell werden BIOS Informationen und die Seriennummer wie folgt ermittelt:

Der folgende PowerShell Befehl enthält die Seriennummer des aktuellen Computers:

Das Cmdlet ruft die Klasse win32_bios ab, aus einer CIM-Instanz des CIM-Server, und bringt die BIOS Information zur Ausgabe.

Beitrag Teilen!