Freigeben über


Was gibt es Neues in PowerShell 7.1

Am 11. November 2020 kündigten wir die allgemeine Verfügbarkeit von PowerShell 7.1 an. Aufbauend auf dem in PowerShell 7.0 geschaffenen Fundament konzentrierten sich unsere Bemühungen auf Community-Themen und umfassen eine Reihe von Verbesserungen und Lösungen. Wir setzen uns dafür ein, dass PowerShell eine stabile und leistungsfähige Plattform bleibt.

PowerShell 7.1 enthält folgende Funktionen, Updates und aktuelle Änderungen.

  • PSReadLine 2.1.0, das Predictive IntelliSense enthält
  • PowerShell 7.1 wurde im Microsoft Store veröffentlicht
  • Installationspakete, die für neue Betriebssystemversionen mit Unterstützung für ARM64 aktualisiert wurden
  • 4 neue experimentelle Features und 2 experimentelle Features, die in den Mainstream gebracht wurden
  • Mehrere fehlerhafte Änderungen zur Verbesserung der Benutzerfreundlichkeit

Eine vollständige Liste der Änderungen finden Sie im CHANGELOG- im GitHub-Repository.

PSReadLine 2.1.0

PowerShell 7.1 enthält außerdem PSReadLine 2.1.0. Diese Version enthält Predictive IntelliSense. Weitere Informationen zur Predictive IntelliSense-Funktion finden Sie in der Ankündigung im PowerShell-Blog.

Microsoft Store Installer-Paket

PowerShell 7.1 wurde im Microsoft Store veröffentlicht. Die PowerShell-Version findest du auf der Microsoft Store-Website oder in der Store-Anwendung unter Windows.

Vorteile des Microsoft Store-Pakets:

  • Direkt in Windows integrierte automatische Updates
  • Integriert sich mit anderen Software-Verteilungsmechanismen wie Intune und SCCM

Hinweis

Alle in gespeicherten $PSHOME Systemkonfigurationseinstellungen können nicht geändert werden. Dies schließt die WSMAN-Konfiguration ein. Dadurch wird verhindert, dass Remotesitzungen eine Verbindung mit auf Store basierenden Installationen von PowerShell herstellen. Konfigurationen auf Benutzerebene und SSH-Remoting werden unterstützt.

Weitere Installateure

Weitere Informationen zu unterstützten Betriebssystemen und dem Support-Lebenszyklus finden Sie up-toSupport Lifecycle.

Schau dir die Installationsanleitung für dein bevorzugtes Betriebssystem an:

Zusätzlich unterstützt PowerShell 7.1 ARM32- und ARM64-Varianten von Debian, Ubuntu und ARM64 Alpine Linux.

Obwohl nicht offiziell unterstützt, hat die Community auch Pakete für Arch und Kali Linux bereitgestellt.

Hinweis

Debian 10+, CentOS 8+, Ubuntu 20.04, Alpine und Arm unterstützen derzeit keine WinRM-Fernsteuerung. Details zur Einrichtung von SSH-basiertem Ferning finden Sie unter PowerShell Remoting over SSH.

Experimentelle Funktionen

Weitere Informationen zu den experimentellen Funktionen finden Sie unter Verwendung experimenteller Funktionen.

Die folgenden experimentellen Funktionen sind in dieser Version nun Mainstream-Features:

In dieser Version wurden folgende experimentelle Funktionen hinzugefügt:

  • Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace

    • PowerShell 7.1 erweitert diese experimentelle Funktion, um den Runspace-Parameter zu allen *-PSBreakpoint Cmdlets hinzuzufügen. Der Runspace-Parameter spezifiziert ein Runspace-Objekt , das mit Breakpoints im angegebenen Runspace interagiert.
  • PSNativePSPathResolution – Diese Funktion ermöglicht es, PowerShell-Provider-Pfade an native Befehle zu übergeben, die keine PowerShell-Pfadsyntax unterstützen.

  • PSCultureInvariantReplaceOperator – Wenn der linke Operand in einer -replace Operatoranweisung keine Zeichenkette ist, wird dieser Operand in eine Zeichenkette umgewandelt. Mit aktivierter Funktion verwendet die Konvertierung keine Culture-Einstellungen für die String-Konvertierung.

  • PSSubsystemPluginModel legt die Grundlage für zukünftige Predictive IntelliSense-Plug-ins.

Änderungen und Verbesserungen brechen

  • Das String-Vergleichsverhalten hat sich in .NET 5.0 geändert

    PowerShell 7.1 basiert auf .NET 5.0, das folgende fehlerhafte Änderung einführte:

    Ab .NET 5.0 ignorieren kulturinvariante String-Vergleiche nicht druckfähige Kontrollzeichen.

    Zum Beispiel gelten die folgenden beiden Strings als identisch:

    # Escape sequence "`a" is Ctrl-G or [char]7
    'Food' -eq "Foo`ad"
    
    True
    
  • Korrektur $? , dass es nicht mehr ist $false , wenn der native Befehl auf stderr (#13395) schreibt.

    Es ist üblich, dass native Befehle geschrieben werden stderr , ohne einen Fehler anzuzeigen. Mit dieser Änderung $? wird nur dann $false gesetzt, wenn der native Befehl auch einen von null verschiedenen Ausgangscode hat. Diese Änderung steht in keinem Zusammenhang mit dem experimentellen Merkmal PSNotApplyErrorActionToStderr.

  • Machen Sie $ErrorActionPreference die Ausgabe nativer Befehle nicht beeinflussen stderr (#13361)

    Es ist üblich, dass native Befehle geschrieben werden stderr , ohne einen Fehler anzuzeigen. Mit dieser Änderung stderr wird die Ausgabe weiterhin in ErrorRecord-Objekten erfasst, aber die Laufzeit gilt $ErrorActionPreference nicht mehr, wenn der ErrorRecord von einem nativen Befehl stammt.

  • Umbennen auf an, Get-Date um Unix-Zeiteingabe zu ermöglichen (#13084) (Danke -UnixTimeSeconds-FromUnixTime@aetos382!)

    Der Parameter -FromUnixTime wurde während 7.1-preview.2 hinzugefügt. Der Parameter wurde umbenannt, um besser zum Datentyp zu passen. Dieser Parameter nimmt einen ganzzahligen Wert an, der seit dem 1. Januar 1970 in Sekunden 0:00:00 repräsentiert.

    Dieses Beispiel wandelt eine Unix-Zeit (dargestellt durch die Anzahl der Sekunden seit 1970-01-01 0:00:00) in DateTime um.

    Get-Date -UnixTimeSeconds 1577836800
    
    Wednesday, January 01, 2020 12:00:00 AM
    
  • Erlaube explizit angegebenem benanntem Parameter, denselben Parameter aus dem Hashtabellen-Splatting zu ersetzen (#13162)

    Mit dieser Änderung werden die benannten Parameter aus dem Splatting ans Ende der Parameterliste verschoben, sodass sie gebunden sind, nachdem alle explizit angegebenen benannten Parameter gebunden sind. Die Parameterbindung für einfache Funktionen wirft keinen Fehler aus, wenn ein bestimmter benannter Parameter nicht gefunden werden kann. Unbekannte benannte Parameter sind an den $args Parameter der einfachen Funktion gebunden. Das Verschieben von Splatting ans Ende der Argumentliste ändert die Reihenfolge, in der die Parameter erscheinen $args.

    Beispiel:

    function SimpleTest {
        param(
            $Name,
            $Path
        )
        "Name: $Name; Path: $Path; Args: $args"
    }
    

    Im vorherigen Verhalten ist MyPath nicht dazu -Path gebunden, da es das dritte Argument in der Argumentliste ist. ## Also wird es zusammen mit '$args zusammen mit ' gestopft Blah = "World"

    PS> $hash = @{ Name = "Hello"; Blah = "World" }
    PS> SimpleTest @hash "MyPath"
    Name: Hello; Path: ; Args: -Blah: World MyPath
    

    Mit dieser Änderung werden die Argumente aus @hash ans Ende der Argumentliste verschoben. MyPath wird das erste Argument in der Liste, daher ist es gebunden an -Path.

    PS> SimpleTest @hash "MyPath"
    Name: Hello; Path: MyPath; Args: -Blah: World
    
  • Mach den Schalterparameter -Qualifier für (#12960) nicht positionsbezogen (Split-PathDanke)@yecril71pl!)

  • Lösen Sie das Arbeitsverzeichnis als literalen Pfad auf, wenn Start-Process es nicht angegeben ist (#11946) (Danke @NoMoreFood!)

  • Stellen Sie Parameter in Web-Cmdlets so ein, -OutFile dass sie funktionieren wie -LiteralPath (#11701) (Danke @iSazonov!)

  • Fix-String-Parameterbindung für BigInteger numerische Literale (#11634) (Danke @vexx32!)

  • Unter Windows Start-Process wird eine Prozessumgebung mit allen Umgebungsvariablen aus der aktuellen Sitzung -UseNewEnvironment erstellt und eine neue Standardprozessumgebung erstellt (#10830) (Danke) @iSazonov!)

  • "Nicht umwickeln" return-Ergebnis in PSObject bei der Umwandlung eines ScriptBlock in einen Delegierten (#10619)

    Wenn a ScriptBlock in einen Delegate-Typ konvertiert wird, der im C#-Kontext verwendet werden soll, bringt das Umpacken des Ergebnisses in a PSObject unnötige Probleme mit sich:

    • Wenn der Wert in den Delegate-Rückgabe-Typ umgewandelt wird, wird der PSObject im Wesentlichen entpackt. Das ist PSObject also unnötig.
    • Wenn der Delegate-Return-Typ ist object, wird er in ein PSObject gewickelt, was die Arbeit im C#-Code erschwert.

    Nach dieser Änderung ist das zurückgegebene Objekt das zugrundeliegende Objekt.