Neuerungen in PowerShell 7.4

PowerShell 7.4 umfasst die folgenden Features, Updates und Breaking Changes. PowerShell 7.4 basiert auf .NET 8.0.0.

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

Aktuelle Änderungen

  • Keine Nano Server-Docker-Images für dieses Release verfügbar
  • ProgressAction-Parameter wurde zu den allgemeinen Parametern hinzugefügt
  • Einige PowerShell-APIs wurde so aktualisiert, dass ArgumentException anstelle von ArgumentNullException ausgelöst wird, wenn das Argument eine leere Zeichenfolge ist (#19215) (Vielen Dank, @xtqqczze!)
  • Entfernung von Code im Zusammenhang mit „#requires -pssnapin“ (#19320)
  • Test-Json verwendet jetzt JsonSchema.Net anstelle von Newtonsoft.Json.Schema. Mit dieser Änderung unterstützt „Test-Json“ die älteren Draft 4-Schemas nicht mehr. (#18141) (Danke @gregsdennis!) Weitere Informationen zu JSON-Schemas finden Sie in der JSON-Schema-Dokumentation.
  • Die Ausgabe von Test-Connection enthält nun ausführlichere Informationen zu TCP-Verbindungstests
  • .NET hat Änderungen eingeführt, die Test-Connection betreffen. Das Cmdlet gibt jetzt einen Fehler über die Notwendigkeit zurück, sudo auf Linux-Plattformen bei Verwendung einer benutzerdefinierten Puffergröße zu verwenden (#20369)
  • Experimentelles Feature PSNativeCommandPreserveBytePipe ist jetzt allgemein verfügbar. PowerShell behält die Bytestreamdaten bei, wenn der stdout-Stream eines nativen Befehls an eine Datei umgeleitet wird oder wenn Bytestreamdaten an den stdin-Stream eines nativen Befehls weitergeleitet werden.
  • Ändern der Behandlung relativer Pfade in Resolve-Path bei Verwendung des RelativeBasePath -Parameters (#19755) (Danke @MartinGC94!)
  • Entfernen von unbenutztem PSv2 Code – entfernt die TabExpansion Funktion (#18337)

Updates des Installationsprogramms

Das Windows-MSI-Paket bietet jetzt eine Option zum Deaktivieren von PowerShell-Telemetriedaten während der Installation. Weitere Informationen finden Sie unter Installieren des MSI-Pakets über die Befehlszeile.

Aktualisierte Versionen von PSResourceGet und PSReadLine

PowerShell 7.4 enthält Microsoft.PowerShell.PSResourceGet v1.0.1. Dieses Modul wird parallel mit PowerShellGet v2.2.5 und PackageManagement v1.4.8.1 installiert. Weitere Informationen finden Sie in der Dokumentation für Microsoft.PowerShell.PSResourceGet.

PowerShell 7.4 enthält jetzt PSReadLine v2.3.4. Weitere Informationen finden Sie in der Dokumentation für PSReadLine-.

Verbesserungen bei der TAB-Vervollständigung

Vielen Dank an @MartinGC94 und alle anderen für die Verbesserung der Vervollständigung mit der TAB-Taste.

  • Behebung eines Problems, das beim Abschließen des ersten Befehls in einem Skript mit einem leeren Arrayausdruck auftrat (#18355)
  • Behebung eines Problems mit der Vervollständigung des positionellen Arguments (#17796)
  • Priorisieren des Standardparametersatzes beim Abschließen von Positionsargumenten (#18755)
  • Verbesserung der Pseudobindung für dynamische Parameter (#18030)
  • Verbesserung des Typrückschlusses von Hashtabellenschlüsseln (#17907)
  • Behebung eines Typrückschlussfehlers für leere return-Anweisungen (#18351)
  • Verbesserung des Typrückschlusses für Get-Random (#18972)
  • Beheben eines Problems mit dem Typrückschluss für alle Bereichsvariablen (#18758)
  • Verbesserung der Enumeration abgeleiteter Typen in der Pipeline (#17799)
  • Hinzufügung der Vervollständigung für Werte in Vergleichen beim Vergleich von Enumerationen (#17654)
  • Hinzufügen der Vervollständigung von Eigenschaftszuweisungen für Enumerationen (#19178)
  • Behebung eines Problems mit der Vervollständigung für PSCustomObject-Variableneigenschaften (#18682)
  • Behebung eines Problems mit der Membervervollständigung im Attributargument (#17902)
  • Ausschließen redundanter Parameteraliase aus den Abschlussergebnissen (#19382)
  • Behebung eines Problems mit der Vervollständigung von Klassen mit Basistypen (#19179)
  • Hinzufügen der Vervollständigung für die Verwendung von Schlüsselwörtern (#16514)
  • Behebung des TabExpansion2-Variablenverlusts beim Abschließen von Variablen (#18763)
  • Aktivieren der Vervollständigung von Variablen in ScriptBlock-Bereichen (#19819)
  • Behebung eines Problems bei der Vervollständigung der Foreach-Anweisungsvariablen (#19814)
  • Behebung eines Problems im Zusammenhang mit der Rangfolge von Variablen des Typs „Inference“ (#18691)
  • Behebung eines Problems mit der Membervervollständigung für die PowerShell Enumerationsklasse (#19740)
  • Korrektur der Analyse von Arrayliteralen in Indexausdrücken in Methodenaufrufen (#19224)
  • Verbesserung des Pfadabschlusses (#19489)
  • Behebung eines „Out of bound“-Indizierungsfehlers in CompleteInput für leere Skripteingaben (#19501)
  • Verbesserung der Vervollständigungsleistung von Variablen (#19595)
  • Verbessern der Vervollständigung von Hashtabellenschlüsseln für typbeschränkte Variablenzuweisungen, geschachtelte Hashtabellen usw, (#17660)
  • Ableitung externer Anwendungsausgaben als Zeichenfolgen (#19193)
  • Aktualisierung der Parametervollständigung für Enumerationen, um Werte auszuschließen, die von „ValidateRange“ Attributen nicht zugelassen werden (#17750) (Vielen Dank @fflaten!)).
  • Beheben eines Problems bei der Vervollständigung dynamischer Parameter (#19510)
  • Hinzufügen der Vervollständigung für Variablen, die von der Data-Anweisung zugewiesen wurden (#19831)

Verbesserungen an Web-Cmdlets

Vielen Dank an @CarloToso und alle anderen für die Verbesserung der Web-Cmdlets.

  • Beheben der Dekomprimierung in Web-Cmdlets, um Brotli (#17955) einzuschließen (Danke @iSazonov!)
  • Webcmdlets fügen 308 hinzu, um Code umzuleiten und kleinere Bereinigungen (#18536)
  • Abschließen des Renderns der Statusanzeige in Invoke-WebRequest, wenn der Download abgeschlossen oder abgebrochen wurde (#18130)
  • Web-Cmdlets rufen ein Intervall vom Typ Retry-After aus Antwortheadern ab, wenn der Statuscode 429 lautet. (#18717)
  • Web-Cmdlets legen die Standardzeichensatzcodierung auf „UTF8“ fest. (#18219)
  • Beibehalten von WebSession.MaximumRedirection vor Änderungen (#19190)
  • WebCmdlets analysieren die XML-Deklaration, um den Codierungswert abzurufen (falls vorhanden). (#18748)
  • Behebung eines Problems mit der Verwendung von XML-Text in Web-Cmdlets ohne Codierung (#19281)
  • Anpassen des Verhaltens der PUT-Methode an POST 1 für den Standardinhaltstyp in Web-Cmdlets (#19152)
  • Berücksichtigen von ContentType von Headern in Web-Cmdlets (#19227)
  • Zulassen des Beibehaltens der ursprünglichen HTTP-Methode durch Hinzufügen von -PreserveHttpMethodOnRedirect zu Web-Cmdlets (#18894)
  • Web-Cmdlets zeigen einen Fehler bei der Umleitung von HTTPS auf HTTP an (#18595)
  • Hinzufügen einer AllowInsecureRedirect-Option zu Web-Cmdlets (#18546)
  • Verbessern ausführlicher Nachrichten in Web-Cmdlets, wenn die Inhaltslänge unbekannt ist (#19252)
  • Erstellen des relativen URI für Links aus der Antwort in Invoke-WebRequest (#19092)
  • Behebung des Problems der Umleitung von -CustomMethod POST in WebCmdlets (#19111)
  • Verwerfen der vorherigen Antwort in Web-Cmdlets (#19117)
  • Verbesserung der XML- und JSON-Fehlerformate für Invoke-WebRequest (#18837)
  • Hinzufügen von ValidateNotNullOrEmpty zu OutFile- und InFile-Parametern von Web-Cmdlets (#19044)
  • HttpKnownHeaderNames-Updateheaderliste (#18947)
  • Behebung des Fehlers im Zusammenhang mit „Invoke-RestMethod -FollowRelLink“-Links, die Kommas enthalten (#18829)
  • Behebung eines Fehlers beim Verwalten der Umleitung und der KeepAuthorization in Web-Cmdlets (#18902)
  • Hinzufügen von StatusCode zu HttpResponseException (#18842)
  • Unterstützung persistenter HTTP-Verbindungen in Web-Cmdlets (#19249) (Vielen Dank, @stevenebutler!)
  • Kleine Bereinigung Invoke-RestMethod (#19490)
  • Verbessern der ausführlichen Meldung von WebCmdlets, um die richtige HTTP-Version anzuzeigen (#19616)
  • Hinzufügen von FileNameStar zu MultipartFileContent in WebCmdlets (#19467)
  • Korrektur des HTTP-Status von 409 auf 429 für WebCmdlets, um ein Wiederholungsintervall aus „Retry-After“-Header zu erhalten. (#19622, mit bestem Dank an @mkht!)!)
  • Ändern von „-TimeoutSec„ zu „-ConnectionTimeoutSeconds„ und Hinzufügen von „-OperationTimeoutSeconds“ zu Web-Cmdlets (#19558) (Vielen Dank an @stevenebutler!) für andere Cmdlets)
  • Unterstützung von STRG+C, wenn die Verbindung beim Lesen von Daten in WebCmdlets hängen bleibt (#19330) (Vielen Dank an @stevenebutler!)!)
  • Unterstützung für Unix-Domänensocket in WebCmdlets (#19343)

Weitere Verbesserungen an Cmdlets

  • Test-Connection gibt jetzt Fehler über die Notwendigkeit zurück, sudo auf Linux-Plattformen bei Verwendung einer benutzerdefinierten Puffergröße zu verwenden (#20369)
  • Hinzufügen von Ausgabetypen zu Formatbefehlen (#18746) (Vielen Dank an @MartinGC94!)!)
  • Hinzufügen von Output-Typattributen für Get-WinEvent (#17948) (Vielen Dank an @MartinGC94!)!)
  • Hinzufügen der Parameter Path und LiteralPath zum Cmdlet Test-Json (#19042) (Vielen Dank, @ArmaanMcleod!)
  • Hinzufügen des NoHeader-Parameters zu den Cmdlets ConvertTo-Csv und Export-Csv (#19108) (Vielen Dank, @ArmaanMcleod!)
  • Parameter Confirm und WhatIf zu Stop-Transcripthinzugefügt (#18731) (Vielen Dank an @JohnLBevan!)
  • Parameter FuzzyMinimumDistance zu Get-Command hinzugefügt (#18261)
  • Unterstützung des Parameters Encoding für die ANSI-Codierung in PowerShell (#19298) (Vielen Dank, @CarloToso!)
  • Hinzufügen des Fortschritts zu Copy-Item (#18735)
  • Update-Help meldet jetzt einen Fehler, wenn auf US-fremden Systemen eine implizite Kultur verwendet wird. (#17780) (Vielen Dank an @dkaszews!))
  • Keine Aktivität beim Erstellen eines abgeschlossenen Fortschrittsdatensatzes erforderlich (#18474) (Dank @MartinGC94!)
  • Ablehnen negativer Werte für „Get-Content-“Cmdlet-Parameter -Head und -Tail (#19715) (Vielen Dank an @CarloToso!)!)
  • Update-Help löst den richtigen Fehler aus, wenn die aktuelle Kultur keiner Sprache zugeordnet ist (#19765) (Dank @josea!)
  • Ermöglichen des Kombinierens von „-Skip“- und „-SkipLast“-Parametern im „Select-Object“-Cmdlet. (#18849, mit bestem Dank an @ArmaanMcleod!)!)
  • Hinzufügen des Cmdlet „Get-SecureRandom“ (#19587)
  • Set-Clipboard -AsOSC52 für die Remotenutzung (#18222) (Vielen Dank an @dkaszews!)!)
  • Beschleunigen der relativen Resolve-Path-Pfadauflösung (#19171) (Vielen Dank an @MartinGC94!)!)
  • Hinzufügen des Switch-Parameters -CaseInsensitive zu den Cmdlets Select-Object und Get-Unique (#19683) (Vielen Dank, @ArmaanMcleod!)
  • Beim Ausführen von Restart-Computer und Stop-Computer sollte ein Fehler ausgegeben werden, wenn sie nicht über sudo unter Unix ausgeführt werden (#19824)

Engine-Verbesserungen

Updates für $PSStyle

  • Eigenschaften Dim und DimOff hinzugefügt (#18653)
  • Statische Methoden zur Klasse PSStyle hinzugefügt, die Werte vom Typ ConsoleColor (Vorder- und Hintergrund) ANSI-Escapesequenzen zuordnen (#17938)
  • Tabellenüberschriften für berechnete Felder werden standardmäßig kursiv formatiert
  • Hinzufügen der Unterstützung der Beachtung von „$PSStyle.OutputRendering“ auf dem Remotehost (#19601)
  • Aktualisierte Telemetriedaten für die Verwendung von CrescendoBuilt Modulen (#20371)

Weitere Engine-Aktualisierungen

  • PowerShell-Klasse wird beim Deklarieren des Attributs NoRunspaceAffinity nicht Runspace zugeordnet. (#18138)
  • Attribut ValidateNotNullOrWhiteSpace hinzugefügt (#17191) (Vielen Dank an @wmentha!)
  • sqlcmd zur Liste für die Übergabe von Legacyargumenten hinzugefügt (#18559)
  • Funktion cd~ hinzugefügt (#18308) (Vielen Dank an @GigaScratch!)
  • Korrektur der Arraytypanalyse in generischen Typen (#19205) (Vielen Dank an @MartinGC94!)!)
  • Behebung eines Problems mit Platzhalter-Globbing im Stamm von Gerätepfaden (#19442) (Vielen Dank an @MartinGC94!)!)
  • Hinzufügen einer öffentlichen API zum Abrufen von Speicherorten von PSModulePath-Elementen (#19422)
  • Korrektur einer falschen Zeichenfolge für die Typkonvertierung (#19560) (Vielen Dank an @MartinGC94!)!)
  • Behebung der langsamen Ausführung, wenn viele Breakpoints verwendet werden (#14953) (Vielen Dank an @nohwnd!)!)
  • Entfernung von Code im Zusammenhang mit „#requires -pssnapin“ (#19320)

Experimentelle Features

In PowerShell 7.4 werden folgende experimentelle Features eingeführt:

  • PSFeedbackProvider: Ersetzt das hartcodierte Vorschlagsframework durch einen erweiterbaren Feedbackanbieter.
    • Dieses Feature fügt auch die Eigenschaften FeedbackName, FeedbackText und FeedbackAction zu $PSStyle.Formatting hinzu, um das Ändern der Formatierung von Feedbacknachrichten zu ermöglichen.
  • PSModuleAutoLoadSkipOfflineFiles: Die Modulermittlung überspringt jetzt Dateien, die von Cloudanbietern als unvollständig auf dem Datenträger gekennzeichnet sind.
  • PSCommandWithArgs: Hinzufügen von Unterstützung für das Übergeben von Argumenten an Befehle als einzelne Zeichenfolge

Die folgenden experimentellen Features haben sich dauerhaft durchgesetzt:

Folgende experimentelle Features werden in PowerShell 7.4 geändert:

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