Neuerungen in PowerShell 7.3

PowerShell 7.3 ist das nächste Vorschaurelease, das auf .NET 7.0 basiert.

PowerShell 7.3 umfasst die folgenden Features, Updates und Breaking Changes.

Breaking Changes und Verbesserungen

  • In diesem Release wurden Windows-APIs aus Gründen der Konformität aktualisiert oder entfernt, was bedeutet, dass PowerShell 7.3 nicht unter Windows 7 ausgeführt wird. Windows 7 wird nicht mehr unterstützt, jedoch konnten vorherige Builds unter Windows 7 ausgeführt werden.
  • PowerShell Direct für Hyper-V wird nur auf Windows 10 Version 1809 und höher unterstützt.
  • Test-Connection ist aufgrund eines absichtlichen Breaking Change in .NET 7 fehlerhaft. Der Fehler wird in #17018 nachverfolgt.
  • Hinzufügen eines clean-Blocks zum Skriptblock als Peer für begin, process und end, um eine einfache Ressourcenbereinigung zu ermöglichen (#15177)
  • Ändern der Standardeinstellung für $PSStyle.OutputRendering in Host
  • Out-String und Out-File sollen die Zeichenfolgeneingaben unverändert beibehalten (#17455)
  • Typdatendefinition von System.Security.AccessControl.ObjectSecurity in das Modul Microsoft.PowerShell.Security verschoben (#16355) (vielen Dank an @iSazonov!)
    • Vor dieser Änderung musste ein Benutzer das Modul Microsoft.PowerShell.Security nicht explizit importieren, um die für eine Instanz von System.Security.AccessControl.ObjectSecurity definierten Eigenschaften des Codes zu verwenden.
    • Nach dieser Änderung muss ein Benutzer das Modul Microsoft.PowerShell.Security explizit importieren, um diese Codeeigenschaften und -methoden verwenden zu können.

Verbesserungen bei der TAB-Vervollständigung

  • PowerShell 7.3 enthält PSReadline 2.2.6, wodurch Predictive IntelliSense standardmäßig aktiviert wird. Weitere Informationen finden Sie unter about_PSReadLine.
  • Korrigieren der Tabstopp-Vervollständigung innerhalb des für das ValidateScriptAttribute angegebenen Skriptblocks (#14550) (vielen Dank an @MartinGC94!)
  • TAB-Vervollständigung für Schleifenbezeichnungen nach break/continue hinzugefügt (#16438) (vielen Dank an @MartinGC94!)
  • Hashtable-Vervollständigung in mehreren Szenarien verbessert (#16498) (vielen Dank an @MartinGC94!)
    • Parametersplatting
    • Arguments-Parameter für Invoke-CimMethod
    • FilterHashtable-Parameter für Get-WinEvent
    • Property-Parameter für CIM-Cmdlets
    • Entfernt Duplikate aus Szenarien mit Membervervollständigung
  • Schrägstriche bei Vervollständigung der Netzwerkfreigabe (UNC-Pfad) unterstützt (#17111) (vielen Dank an @sba923!)
  • Automatische Vervollständigung von Membern verbessert (#16504) (vielen Dank an @MartinGC94!)
  • Priorisieren von ValidateSet-Vervollständigungen gegenüber Parameter-Enumerationen (#15257) (vielen Dank an @MartinGC94!))
  • Typrückschlussunterstützung für generische Methoden mit Typparametern hinzugefügt (#16951) (vielen Dank an @MartinGC94!)
  • Typrückschluss und Vervollständigungen verbessert (#16963) (vielen Dank an @MartinGC94!)
    • Ermöglicht die Darstellung von Methoden in Abschlussergebnissen für ForEach-Object -MemberName
    • Verhindert die Fertigstellung von Ausdrücken, die leere Ausdrücke wie z. B. ([void]("")) zurückgeben
    • Ermöglicht die Anzeige nicht standardmäßiger Klassenkonstruktoren bei AST-basiertem Klassenabschluss
  • Typrückschluss für $_ verbessert (#17716) (vielen Dank an @MartinGC94!)
  • Typrückschluss für ICollection korrigiert (#17752) (vielen Dank an @MartinGC94!)
  • Verhindern, dass geschweifte Klammern beim Vervollständigen von Variablen entfernt werden (#17751) (vielen Dank an @MartinGC94!)
  • Vervollständigung von Indexausdrücken für Wörterbücher hinzugefügt (#17619) (vielen Dank an @MartinGC94!)
  • Typvervollständigung für Attributtoken korrigiert (#17484) (vielen Dank an @MartinGC94!)
  • Dynamische Vervollständigung der Parameterregisterkarte verbessert (#17661) (vielen Dank an @MartinGC94!)
  • Binden von Positionsparametern verhindern, wenn Parameter vor dem Wert vervollständigt werden (#17693) (vielen Dank an @MartinGC94!)

Fehlerbehandlung verbessert

  • Korrektes Festlegen von $? für Befehlsausdruck mit Umleitungen (#16046)
  • Beheben eines Umwandlungsfehlers bei Verwendung von $PSNativeCommandUseErrorActionPreference (#15993)
  • Ermöglichen einer optionalen Berücksichtigung von ErrorActionPreference bei der nativen Fehlerbehandlung für Befehle (#15897)
  • Ausführbaren Pfad angeben als TargetObject für ErrorRecord mit einem Exitcode ungleich null (#16108) (vielen Dank an @rkeithhill!)

Verbesserungen bei Sitzung und Remoting

  • Zu den PSRP-over-SSH-Befehlen „-Options“ hinzufügen, um die direkte Übergabe von OpenSSH-Optionen zu ermöglichen (#12802) (vielen Dank an @BrannenGH!)
  • Hinzufügung von Parameter „-ConfigurationFile“ zu „pwsh“, um den Start eines neuen Prozesses mit der in einer .pssc-Datei definierten Sitzungskonfiguration zu ermöglichen (#17447)
  • Hinzufügen von Unterstützung für die Verwendung von New-PSSessionConfigurationFile auf anderen Plattformen als Windows (#17447)

Aktualisierte Cmdlets

  • Parameter „-HttpVersion“ zu Web-Cmdlets hinzugefügt (#15853) (vielen Dank an @hayhay27!)
  • Unterstützung für Eingabetags mit offenem Ende zu Web-Cmdlets hinzugefügt (#16193) (vielen Dank an @farmerau!)
  • ConvertTo-Json -Depth korrigiert, um maximal 100 zuzulassen (#16197) (vielen Dank an @KevRitchie!)@rkeithhill!)
  • Variablenverarbeitung beim Aufruf von Invoke-Command mit dem Ausdruck $using: verbessert (#16113) (vielen Dank an @dwtaber!)
  • -StrictMode“ zu „Invoke-Command“ hinzugefügt, um die Angabe des strict-Modus beim lokalen Aufruf des Befehls zu ermöglichen (#16545) (vielen Dank an @Thomas-Yu!)
  • Hinzufügen eines clean-Blocks zum Skriptblock als Peer für begin, process und end, um eine einfache Ressourcenbereinigung zu ermöglichen (#15177)
  • Der Schalter -Amended wurde dem Cmdlet Get-CimClass hinzugefügt (#17477) (vielen Dank an @iSazonov)
  • ConvertFrom-Json -AsHashtable für die Verwendung der sortierten Hashtabelle geändert (#17405)
  • ANSI-Escapesequenzen in Zeichenfolgen vor dem Senden an Out-GridView entfernt (#17664)
  • Parameter Milliseconds zu New-TimeSpan hinzugefügt (#17621) (vielen Dank an @NoMoreFood!)
  • Optionale Parameter zeigen, wenn Methodendefinitionen und Überladungen angezeigt werden (#13799) (vielen Dank an @eugenesmlv!)
  • Ausführung von Befehlen zulassen, auch wenn das aktuelle Arbeitsverzeichnis nicht mehr vorhanden ist (#17579)
  • Unterstützung für HTTPS mit Set-AuthenticodeSignature -TimeStampServer hinzugefügt (#16134) (vielen Dank an @Ryan-Hutchison-USAF!)
  • Dezimalzahlen in einer Tabelle unter Verwendung der aktuellen Kultur rendern (#17650)
  • Typbeschleuniger hinzugefügt, die für OrderedDictionary sortiert sind (#17804) (vielen Dank an @fflaten!)
  • find.exe zum Legacybindungsverhalten für Argumente für Windows hinzugefügt (#17715)
  • Schalter -noprofileloadtime zu pwsh hinzugefügt (#17535) (vielen Dank an @rkeithhill!)

Eine umfassende Liste der Änderungen finden Sie im Änderungsprotokoll im GitHub-Repository.

Experimentelle Features

In PowerShell 7.3. haben sich folgende experimentelle Features dauerhaft durchgesetzt:

  • PSAnsiRenderingFileInfo: Dieses Feature fügt das $PSStyle.FileInfo-Member hinzu und ermöglicht die Färbung bestimmter Dateitypen.

  • PSCleanBlock: Fügt einen clean-Block zum Skriptblock als Peer für begin, process und end hinzu, um eine einfache Ressourcenbereinigung zu ermöglichen

  • PSAMSIMethodInvocationLogging: erweitert die zur Überprüfung an AMSI gesendeten Daten um alle Aufrufe von Membern von .NET-Methoden.

  • PSNativeCommandArgumentPassing: PowerShell verwendet nun die ArgumentList-Eigenschaft des StartProcessInfo-Objekts anstelle des alten Mechanismus zum Rekonstruieren einer Zeichenfolge beim Aufruf einer nativen ausführbaren Datei.

    PowerShell 7.3.1 fügt sqlcmd.exe der Liste der nativen Befehle in Windows hinzu, die den Legacy-Stil der Argumentübergabe verwenden.

  • PSExec Fügt das neue Cmdlet Switch-Process (alias exec) hinzu, um exec-Kompatibilität für Systeme bereitzustellen, die auf anderen Systemen als Windows basieren.

    In PowerShell 7.3.1 wurde das exec-Alias in eine Funktion geändert, die Switch-Process umschließt. Mit der Funktion können Sie Parameter an den nativen Befehl übergeben, die möglicherweise fälschlicherweise an den WithCommand-Parameter gebunden wurden.

In PowerShell 7.3 werden die folgenden experimentellen Features eingeführt:

  • PSNativeCommandErrorActionPreference: Fügt die $PSNativeCommandUseErrorActionPreference-Variable hinzu, um von nativen Befehlen ausgelöste Fehler als PowerShell-Fehler zu aktivieren

In PowerShell 7.3 werden die folgenden experimentellen Features entfernt:

  • Das experimentelle Feature PSNativePSPathResolution wird nicht länger unterstützt.
  • Das experimentelle Feature PSStrictModeAssignment wird nicht länger unterstützt.

Weitere Informationen zu den experimentellen Features finden Sie unter Verwenden experimenteller Features.