Freigeben über


Was gibt es neu in PowerShell 7.0

PowerShell 7.0 ist eine Open-Source-Version, plattformübergreifend (Windows, macOS und Linux) von PowerShell, die zur Verwaltung heterogener Umgebungen und einer hybriden Cloud entwickelt wurde.

In dieser Veröffentlichung stellen wir eine Reihe neuer Funktionen vor, darunter:

  • Pipeline-Parallelisierung mit ForEach-Object -Parallel
  • Neue Betreiber:
    • Ternäroperator: a ? b : c
    • Pipeline-Kettenoperatoren: || und &&
    • Nullbedingte Operatoren: ?? und ??=
  • Eine vereinfachte und dynamische Fehleransicht und Get-Error Cmdlet zur einfacheren Fehleruntersuchung
  • Eine Kompatibilitätsschicht, die es Nutzern ermöglicht, Module in einer impliziten Windows-PowerShell-Sitzung zu importieren
  • Automatische Benachrichtigungen über neue Versionen
  • Die Möglichkeit, DSC-Ressourcen direkt aus PowerShell 7 (experimentell) aufzurufen

Um eine vollständige Liste der Funktionen und Korrekturen zu sehen, siehe die Änderungsprotokolle.

Wo kann ich PowerShell installieren?

PowerShell 7 unterstützt derzeit folgende Betriebssysteme auf x64, darunter:

  • Windows 8.1 und 10
  • Windows Server 2012, 2012 R2, 2016 und 2019
  • macOS 10.13+
  • Red Hat Enterprise Linux (RHEL) / CentOS 7
  • Fedora 30+
  • Debian 9
  • Ubuntu LTS 16.04+
  • Alpine Linux 3.8+

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

Schau dir die Installationsanleitung für dein bevorzugtes Betriebssystem Windows, macOS oder Linux an.

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

Hinweis

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

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

Ausführung von PowerShell 7

PowerShell 7 installiert in einem Verzeichnis, das separat von Windows PowerShell ist. Dadurch können Sie PowerShell 7 parallel zu Windows PowerShell 5.1 ausführen. Für PowerShell 6.x ist PowerShell 7 ein In-Place-Upgrade, das PowerShell 6.x entfernt.

  • PowerShell 7 wird installiert auf %programfiles%\PowerShell\7
  • Der Ordner %programfiles%\PowerShell\7 wird zu $env:PATH hinzugefügt.

Das PowerShell 7 Installer-Paket aktualisiert frühere Versionen von PowerShell 6.x:

  • PowerShell 6.x unter Windows: %programfiles%\PowerShell\6 wird ersetzt durch %programfiles%\PowerShell\7
  • Linux: /opt/microsoft/powershell/6 wird ersetzt durch /opt/microsoft/powershell/7
  • macOS: /usr/local/microsoft/powershell/6 wird ersetzt durch /usr/local/microsoft/powershell/7

Hinweis

In Windows PowerShell heißt powershell.exedie ausführbare Datei zum Starten von PowerShell . Ab Version 6 und höher wird der Name der ausführbaren Datei geändert, um eine Seitenausführung zu unterstützen. Der neue ausführbare Name zum Start von PowerShell 7 ist pwsh.exe. Vorschau-Builds bleiben als pwsh-previewpwsh und nicht unter dem 7-Vorschauverzeichnis.

Verbesserte Abwärtskompatibilität mit Windows PowerShell

PowerShell 7.0 markiert einen Wechsel zu .NET Core 3.1 und ermöglicht eine deutlich bessere Abwärtskompatibilität mit bestehenden Windows-PowerShell-Modulen. Dazu gehören viele Windows-Module, die GUI-Funktionalitäten erfordern, wie Out-GridView und Show-Command, sowie viele Rollenmanagement-Module, die als Teil von Windows ausgeliefert werden.

Für Windows wird ein neuer Switch-Parameter UseWindowsPowerShell hinzugefügt Import-Module. Dieser Switch erstellt in PowerShell 7 ein Proxy-Modul, das einen lokalen Windows-PowerShell-Prozess verwendet, um implizit alle in diesem Modul enthaltenen Cmdlets auszuführen. Für weitere Informationen zu Import-Module.

Weitere Informationen darüber, welche Microsoft-Module mit PowerShell 7.0 funktionieren, finden Sie in der Modulkompatibilitätstabelle.

Parallele Ausführung wurde zu ForEach-Object

Das ForEach-Object Cmdlet, das Elemente in einer Sammlung iteriert, verfügt nun über eingebaute Parallelität mit dem neuen Parallel-Parameter .

Standardmäßig verwenden parallele Skriptblöcke das aktuelle Arbeitsverzeichnis des Aufrufers, der die parallelen Aufgaben gestartet hat.

Dieses Beispiel ruft 50.000 Logeinträge aus 5 Systemprotokollen auf einem lokalen Windows-Rechner ab:

$logNames = 'Security','Application','System','Windows PowerShell','Microsoft-Windows-Store/Operational'

$logEntries = $logNames | ForEach-Object -Parallel {
    Get-WinEvent -LogName $_ -MaxEvents 10000
} -ThrottleLimit 5

$logEntries.Count

50000

Der Parallel-Parameter spezifiziert den Skriptblock, der für jeden Eingabelognamen parallel ausgeführt wird.

Der neue ThrottleLimit-Parameter begrenzt die Anzahl der parallel laufenden Skriptblöcke zu einem bestimmten Zeitpunkt. Der Standardwert ist 5.

Verwenden Sie die Variable, $_ um das aktuelle Eingabeobjekt im Skriptblock darzustellen. Nutze den Scope, $using: um Variablenreferenzen an den laufenden Skriptblock zu übergeben.

Für weitere Informationen zu ForEach-Object.

Ternärer Operator

PowerShell 7.0 führt einen ternären Operator ein, der sich wie eine vereinfachte if-else Anweisung verhält. Der ternäre Operator von PowerShell ist eng anhand der C#-Syntax der ternären Operatoren modelliert:

<condition> ? <if-true> : <if-false>

Der Bedingungsausdruck wird immer ausgewertet und sein Ergebnis in einen Booleschen umgewandelt, um zu bestimmen, welcher Zweig als nächstes ausgewertet wird:

  • Der <if-true> Ausdruck wird ausgeführt, wenn der <condition> Ausdruck wahr ist.
  • Der ausdruck <if-false> wird ausgeführt, wenn der <condition> Ausdruck "false" ist.

Beispiel:

$message = (Test-Path $path) ? "Path exists" : "Path not found"

In diesem Beispiel gilt: Wenn der Pfad existiert, dann wird Pfad existiert . Wenn der Pfad nicht existiert, wird Pfad nicht gefunden angezeigt.

Für weitere Informationen über If.

Betreiber der Pipeline-Kette

PowerShell 7 implementiert die && und-Operatoren || , um Pipelines bedingt zu ketten. Diese Operatoren sind in PowerShell als "Pipeline-Chain-Operatoren" bekannt und ähneln AND- und OR-Listen in Shells wie bash und zsh, sowie konditionalen Verarbeitungssymbolen in der Windows-Befehlsshell (cmd.exe).

Der Operator && führt die rechte Pipeline aus, wenn die linke Pipeline erfolgreich war. Dagegen führt der Operator || die rechte Pipeline aus, wenn die linke Pipeline fehlgeschlagen ist.

Hinweis

Diese Operatoren verwenden die Variablen $? und $LASTEXITCODE, um zu ermitteln, ob eine Pipeline fehlgeschlagen ist. Auf diese Weise können Sie sie mit nativen Befehlen und nicht nur mit Cmdlets oder Funktionen verwenden.

Hier folgt der erste Befehl und der zweite Befehl wird ausgeführt:

Write-Output 'First' && Write-Output 'Second'
First
Second

Hier schlägt der erste Befehl fehl, der zweite wird nicht ausgeführt:

Write-Error 'Bad' && Write-Output 'Second'
Write-Error: Bad

Hier gelingt der erste Befehl, der zweite Befehl wird nicht ausgeführt:

Write-Output 'First' || Write-Output 'Second'
First

Hier schlägt der erste Befehl fehl, sodass der zweite Befehl ausgeführt wird:

Write-Error 'Bad' || Write-Output 'Second'
Write-Error 'Bad'
Second

Für weitere Informationen über Pipeline Chain Operators.

Null-Koaleszierungs-, Zuweisungs- und Konditionaloperatoren

PowerShell 7 enthält Null-Koalescing-Operatoren ??, Null-bedingte Zuweisung ??=sowie Null-bedingte Zugriffsoperatoren ?. und ?[].

Null-Koaleszierender Operator ??

Der null-koalescenierende Operator ?? gibt den Wert seines linken Operanden zurück, wenn er nicht null ist. Andernfalls wertet sie den rechten Operanden aus und gibt das Ergebnis zurück. Der Operator ?? wertet seinen rechten Operanden nicht aus, wenn der linke Operand mit ungleich NULL auswertet wird.

$x = $null
$x ?? 100
100

Im folgenden Beispiel wird der rechte Operand nicht ausgewertet:

[string] $todaysDate = '1/10/2020'
$todaysDate ?? (Get-Date).ToShortDateString()
1/10/2020

Null-bedingte Zuweisungsoperator?? =

Der Null-bedingte Zuweisungsoperator ??= weist den Wert seines rechten Operanden seinem linken Operanden nur dann zu, wenn der linke Operand auf null auswertet. Der Operator ??= wertet seinen rechten Operanden nicht aus, wenn der linke Operand mit ungleich NULL auswertet wird.

$x = $null
$x ??= 100
$x
100

Im folgenden Beispiel wird der rechte Operand nicht ausgewertet:

[string] $todaysDate = '1/10/2020'
$todaysDate ??= (Get-Date).ToShortDateString()
1/10/2020

Null-bedingte Zugriffsoperatoren für Mitglieder?. und? [] (Experimentell)

Hinweis

Dies ist eine experimentelle Funktion namens PSNullConditionalOperators. Weitere Informationen finden Sie unter Verwendung experimenteller Funktionen.

Ein Null-bedingter Operator erlaubt Mitgliederzugriff, ?., oder Elementzugriff, , auf seinen Operanden nur, ?[]wenn dieser Operand auf nicht-null auswertet; andernfalls gibt er null zurück.

Hinweis

Da PowerShell ? Teil des Variablennamens sein kann, ist für die Verwendung dieser Operatoren eine formale Spezifikation des Variablennamens erforderlich. Es ist also erforderlich, um die Variablennamen zu verwenden {} , wie zum Beispiel ${a} wenn ? Teil des Variablennamens ${a?}ist.

Im folgenden Beispiel wird der Wert der Mitgliedsimmobilie Status zurückgegeben:

$Service = Get-Service -Name 'bits'
${Service}?.status
Stopped

Das folgende Beispiel gibt null zurück, ohne zu versuchen, auf den Mitgliedsnamen Status zuzugreifen:

$service = $Null
${Service}?.status

Ähnlich wird unter Verwendung ?[]des Elements der Wert des Elements zurückgegeben:

$a = 1..10
${a}?[0]
1

Und wenn der Operand null ist, wird das Element nicht abgerufen und null wird zurückgegeben:

$a = $null
${a}?[0]

Für weitere Informationen About_Operators.

Neue Ansicht: ConciseView und cmdlet Get-Error

PowerShell 7.0 verbessert die Darstellung von Fehlermeldungen, um die Lesbarkeit interaktiver und Skriptfehler mit einer neuen Standardansicht , ConciseView, zu verbessern. Die Ansichten sind benutzerdefiniert über die Präferenzvariable $ErrorViewwählbar.

Bei ConciseView, wenn ein Fehler nicht von einem Skript- oder Parserfehler stammt, handelt es sich um eine einzeilige Fehlermeldung:

Get-Childitem -Path c:\NotReal
Get-ChildItem: can't find path 'C:\NotReal' because it doesn't exist

Wenn der Fehler während der Skriptausführung auftritt oder ein Parsing-Fehler ist, gibt PowerShell eine mehrzeilige Fehlermeldung zurück, die den Fehler enthält, einen Zeiger und eine Fehlermeldung, die zeigt, wo sich der Fehler in dieser Zeile befindet. Wenn das Terminal keine ANSI-Farbescape-Sequenzen (VT100) unterstützt, werden Farben nicht angezeigt.

Fehleranzeige durch ein Skript

Die Standardansicht in PowerShell 7 ist ConciseView. Die vorherige Standardansicht war NormalView, und du kannst diese auswählen, indem du die Präferenzvariable $ErrorVieweinstellst.

$ErrorView = 'NormalView' # Sets the error view to NormalView
$ErrorView = 'ConciseView' # Sets the error view to ConciseView

Hinweis

Eine neue Eigenschaft ErrorAccentColor wurde hinzugefügt $Host.PrivateData , um die Änderung der Akzentfarbe der Fehlermeldung zu unterstützen.

Ein neues CMDLET Get-Error bietet bei Bedarf eine vollständige, detaillierte Ansicht des vollständig qualifizierten Fehlers. Standardmäßig zeigt das Cmdlet die vollständigen Details, einschließlich innerer Ausnahmen, des zuletzt aufgetretenen Fehlers an.

Anzeige aus Get-Error

Das Get-Error cmdlet unterstützt Eingaben aus der Pipeline mit der eingebauten Variable.$Error Get-Error zeigt alle gepipten Fehler an.

$Error | Get-Error

Das Get-Error Cmdlet unterstützt den Parameter Neueste und ermöglicht es Ihnen, anzugeben, wie viele Fehler aus der aktuellen Sitzung Sie angezeigt werden möchten.

Get-Error -Newest 3 # Displays the lst three errors that occurred in the session

Für weitere Informationen zu Get-Error.

Benachrichtigung über neue Version

PowerShell 7 verwendet Aktualisierungsbenachrichtigungen, um Nutzer auf das Vorhandensein von PowerShell-Updates aufmerksam zu machen. Einmal pro Tag fragt PowerShell einen Onlinedienst ab, um zu prüfen, ob eine neuere Version verfügbar ist.

Hinweis

Die Aktualisierungsprüfung findet während der ersten Sitzung innerhalb eines bestimmten 24-Stunden-Zeitraums statt. Aus Leistungsgründen beginnt die Update-Prüfung 3 Sekunden nach Beginn der Sitzung. Die Benachrichtigung wird nur zu Beginn nachfolgender Sitzungen angezeigt.

Standardmäßig abonniert PowerShell je nach Version oder Zweig einen von zwei verschiedenen Benachrichtigungskanälen. Unterstützte, allgemein verfügbare (GA)-Versionen von PowerShell geben nur Benachrichtigungen für aktualisierte GA-Versionen zurück. Preview- und Release Candidate (RC)-Veröffentlichungen benachrichtigen Updates zu Preview-, RC- und GA-Veröffentlichungen.

Das Verhalten der Aktualisierungsbenachrichtigung kann mithilfe der umgebungsvariablen $Env:POWERSHELL_UPDATECHECK geändert werden. Die folgenden Werte werden unterstützt:

  • Standard ist dasselbe wie nicht definieren $Env:POWERSHELL_UPDATECHECK
    • GA-Releases benachrichtigen zu Updates von GA-Releases.
    • Vorschau-/RC-Releases benachrichtigen zu Updates von GA- und Vorschau-Releases.
  • Deaktivieren schaltet die Update-Benachrichtigungsfunktion aus
  • LTS benachrichtigt nur über Aktualisierungen von Long-Term-Servicing (LTS) GA-Releases

Hinweis

Die Umgebungsvariable $Env:POWERSHELL_UPDATECHECK existiert erst, wenn sie zum ersten Mal gesetzt wird.

Um die Versionsbenachrichtigung nur für LTS Veröffentlichungen einzustellen:

$Env:POWERSHELL_UPDATECHECK = 'LTS'

Um die Versionsbenachrichtigung auf das folgende Default Verhalten einzustellen:

$Env:POWERSHELL_UPDATECHECK = 'Default'

Für weitere Informationen zu Update-Benachrichtigungen.

Neue DSC-Ressourcenunterstützung mit Invoke-DSCResource (Experimental)

Hinweis

Dies ist eine experimentelle Funktion namens PSDesiredStateConfiguration.InvokeDscResource. Weitere Informationen finden Sie unter Verwendung experimenteller Funktionen.

Das Invoke-DscResource Cmdlet führt eine Methode einer festgelegten PowerShell Desired State Configuration (DSC)-Ressource aus.

Dieses Cmdlet ruft eine DSC-Ressource direkt auf, ohne ein Konfigurationsdokument zu erstellen. Mit diesem Cmdlet können Konfigurationsmanagement-Produkte Windows oder Linux über DSC-Ressourcen verwalten. Dieses Cmdlet ermöglicht außerdem das Debuggen von Ressourcen, wenn die DSC-Engine mit aktiviertem Debugging läuft.

Dieser Befehl ruft die Set-Methode einer Ressource namens WindowsProcess auf und stellt die obligatorischen Eigenschaften Pfad und Argumente bereit, um den angegebenen Windows-Prozess zu starten.

Invoke-DscResource -Name WindowsProcess -Method Set -ModuleName PSDesiredStateConfiguration -Property @{
  Path = 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe'
  Arguments = ''
}

Für weitere Informationen über Invoke-DSCResource.

Änderungen und Verbesserungen brechen

Änderungen werden abgebrochen

  • Update-Benachrichtigungen unterstützen LTS und Standardkanäle (#11132)
  • Update Test-Connection eher wie das in Windows PowerShell (#10697) funktionieren (Danke). @vexx32!)
  • Geld sparen? für ParenExpression, SubExpression und ArrayExpression (#11040)
  • Setze Arbeitsverzeichnis auf aktuelles Verzeichnis in Start-Job (#10920) (Danke @iSazonov!)
  • Lass $PSCulture konsequent kulturelle Veränderungen während der Sitzung widerspiegeln (#10138) (Danke @iSazonov!)

Motor-Updates und -Fehlerbehebungen

  • Verbesserungen bei Breakpoint-APIs für entfernte Szenarien (#11312)
  • Beheben Sie das Leaking von PowerShell-Klassendefinitionen in einen anderen Runspace (#11273)
  • Beheben Sie eine Regression in der Formatierung, verursacht durch das FirstOrDefault-Primitiv, das in 7.0.0-Preview1 (#11258) hinzugefügt wurde.
  • Zusätzliche Microsoft-Module zum Nachverfolgen in PS7 Telemetry (#10751)
  • Machen Sie genehmigte Funktionen nicht-experimentell (#11303)
  • Aktualisieren Sie ConciseView, um TargetObject zu verwenden, falls zutreffend (#11075)
  • NullReferenceException in CompletionCompleters öffentliche Methoden beheben (#11274)
  • Beheben Sie die Zustandsprüfung des Apartment-Threads auf Nicht-Windows-Plattformen (#11301)
  • Aktualisiere PSModulePath, um Prozess- und Maschinenumgebungsvariablen zu verknüpfen (#11276)
  • .NET Core auf 3.1.0 (#11260) erhöhen
  • Fix-Erkennung von $PSHOME vor $env:PATH (#11141)
  • Erlauben Sie pwsh, $env:PSModulePath zu erben, und ermöglichen Sie powershell.exe den korrekten Start (#11057)
  • Wechsel zu .NET Core 3.1 Vorschau 1 (#10798)
  • Refaktor-Reparse-Tag-Prüfungen im Dateisystemanbieter (#10431) (Danke @iSazonov!)
  • Ersetzen Sie CR und neue Zeile durch ein 0x23CE Zeichen im Skriptprotokoll (#10616)
  • Beheben Sie ein Ressourcenleck, indem Sie den Ereignishandler aus AppDomain.CurrentDomain.ProcessExit (#10626) deregistrieren
  • Füge Unterstützung zu ActionPreference.Break hinzu, um in den Debugger einzubrechen, wenn Debug-, Fehler-, Informations-, Fortschritts-, Verbose- oder Warnmeldungen generiert werden (#8205) (Danke @KirkMunro!)
  • Aktivieren Sie Start-Add-ins im Kontrollpanel in PowerShell, ohne .CPL Erweiterung anzugeben. (#9828)
  • Unterstützen Sie negative Zahlen in -split Operator (#8960) (Danke @ece-jacob-scott!)

Allgemeine Cmdlet-Updates und -Korrekturen

  • Korrektur für das Problem bei Raspbian zur Festlegung des Dateiänderungsdatums in UnixStat Experimental Feature (#11313)
  • Füge -AsPlainText zu ConvertFrom-SecureString hinzu (#11142)
  • WindowsPS-Versionsprüfung für WinCompat hinzugefügt (#11148)
  • Behebung der Fehlermeldung in einigen WinCompat-Szenarien (#11259)
  • Fügen Sie einen nativen binären Resolver hinzu (#11032) (Danke @iSazonov!)
  • Aktualisierung der Berechnung der Zeichenbreite, um CJK-Zeichen korrekt zu respektieren (#11262)
  • Fügen Sie Unblock-File für macOS hinzu (#11137)
  • Regression in Get-PSCallStack korrigieren (#11210) (Danke @iSazonov!)
  • Entfernen Sie das automatische Laden des ScheduledJob-Moduls bei Verwendung von Job-Cmdlets (#11194)
  • Hinzufügen Sie OutputType zu Get-Error cmdlet und bewahren Sie die ursprünglichen Typnamen (#10856)
  • Nullreferenz in der SupportsVirtualTerminal-Eigenschaft (#11105) beheben
  • Fügen Sie Limit Check in Get-WinEvent (#10648) hinzu (Danke @iSazonov!)
  • Befehlslaufzeit korrigieren, damit StopUpstreamCommandsException in -ErrorVariable nicht angezeigt wird (#10840)
  • Setzen Sie die Ausgabekodierung auf [Console]::OutputEncoding für native Befehle (#10824)
  • Unterstützung von mehrzeiligen Codeblöcken in Beispielen (#10776) (Danke @Greg-Smulko!)
  • Fügen Sie den Kulturparameter zu Select-String cmdlet hinzu (#10943) (Danke @iSazonov!)
  • Beheben Sie Start-Job funktionierenden Verzeichnispfad mit nachlaufendem Backslash (#11041)
  • ConvertFrom-Json: Unwrap Collections standardmäßig (#10861) (Danke @danstur!)
  • Verwenden Sie das case-sensitive Hashtable für Group-Object CMDLET mit -CaseSensitive und -AsHashtable Switches (#11030) (Danke @vexx32!)
  • Handle Exception wenn das Aufzählen von Dateien beim Neuaufbau des Pfades fehlschlägt (#11014)
  • Fix ConciseView, um Aktivität statt myCommand anzuzeigen (#11007)
  • Erlauben Sie Web-Cmdlets, HTTP-Fehlerstatusse zu ignorieren (#10466) (Danke @vdamewood!)
  • Beheben Sie das Piping von mehr als einem CommandInfo an Get-Command (#10929)
  • Fügen Sie Get-Counter cmdlet für Windows (#10933) wieder hinzu
  • Lass ConvertTo-Json [AutomationNull]::Value und [NullString]::Value als $null behandeln (#10957)
  • Entferne Klammern von der IPv6-Adresse für SSH-Fernsteuerung (#10968)
  • Absturz beheben, wenn der Befehl, der an pwsh gesendet wird, nur Weißraum ist (#10977)
  • Plattformübergreifende Get-Clipboard und Set-Clipboard hinzugefügt (#10340)
  • Behebung der Einstellung des ursprünglichen Pfads des Dateisystemobjekts so, dass kein zusätzlicher Schrägstrich (#10959) vorhanden ist
  • Unterstützung $null für ConvertTo-Json (#10947)
  • Fügen Sie unter Windows (#10906) Out-Printer Befehl zurück hinzu
  • Beheben Sie Start-Job -WorkingDirectory mit Leerraum (#10951)
  • Geben Sie den Standardwert zurück, wenn Sie für eine Einstellung in PSConfiguration.cs Null erhalten (#10963) (Danke) @iSazonov!)
  • IO-Ausnahme als nicht terminierend behandeln (#10950)
  • Fügen Sie GraphicalHost-Assembly hinzu, um Out-GridView, Show-Command und Get-Help -ShowWindow zu aktivieren (#10899)
  • Nehmen Sie ComputerName über die Pipeline in Get-HotFix (#10852) (Danke @kvprasoon!)
  • Tab-Abschluss für Parameter korrigieren, sodass gemeinsame Parameter als verfügbar angezeigt werden (#10850)
  • Fixieren Sie GetCorrectCasedPath() so, dass zunächst geprüft wird, ob Systemdateieinträge zurückgegeben werden, bevor Sie First() (#10930) aufrufen
  • Setze Arbeitsverzeichnis auf aktuelles Verzeichnis in Start-Job (#10920) (Danke @iSazonov!)
  • Ändern Sie TabExpansion2 so, dass sie keine -CursorColumn mehr benötigen, und behandeln Sie sie als $InputScript.Length (#10849)
  • Behandle den Fall, in dem der Host möglicherweise keine Zeilen oder Spalten des Bildschirms zurückgibt (#10938)
  • Korrektur der Verwendung von Akzentfarben für Hosts, die sie nicht unterstützen (#10937)
  • Fügen Sie Update-List Befehl zurück (#10922)
  • Aktualisierung der FWLink-ID für Clear-RecycleBin (#10925)
  • Während des Tab-Abschlusses die Datei überspringen, wenn die Dateiattribute nicht lesen können (#10910).
  • Fügen Sie Clear-RecycleBin für Windows (#10909) wieder hinzu
  • Fügen Sie hinzu $env:__SuppressAnsiEscapeSequences , um zu steuern, ob eine VT-Escape-Sequenz im Output verwendet werden soll (#10814)
  • Füge -NoEmphasize Parameter hinzu, um Select-String Ausgabe zu kolorieren (#8963) (Danke @derek-xia!)
  • Fügen Sie Get-HotFix cmdlet wieder hinzu (#10740)
  • Machen Sie Add-Type in Anwendungen nutzbar, die PowerShell hosten (#10587)
  • Verwenden Sie eine effektivere Bewertungsreihenfolge in LanguagePrimitives.IsNullLike() (#10781) (Danke @vexx32!)
  • Verbesserung der Handhabung von gemischten Sammlungs-Eingaben und gepipten Eingabeströmen in Format-Hex (#8674) (Danke @vexx32!)
  • Typkonvertierung in SSHConnection-Hashtabellen verwenden, wenn der Wert nicht mit dem erwarteten Typ übereinstimmt (#10720) (Danke @SeeminglyScience!)
  • Beheben Sie Get-Content -ReadCount 0-Verhalten, wenn -TotalCount gesetzt ist (#10749) (Danke @eugenesmlv!)
  • Reword-Zugriff abgelehnt Fehlermeldung in Get-WinEvent (#10639) (Danke @iSazonov!)
  • Aktivieren Sie die Tab-Vervollständigung für Variablenzuweisungen, die enum- oder typbeschränkt sind (#10646)
  • Entfernen Sie die ungenutzte SourceLength-Fernisierungseigenschaft, die Formatierungsprobleme verursacht (#10765)
  • Füge -Delimiter Parameter zu ConvertFrom-StringData hinzu (#10665) (Danke @steviecoaster!)
  • Positionsparameter für ScriptBlock hinzufügen, wenn man Invoke-Command mit SSH verwendet (#10721) (Danke) @machgo!)
  • Zeigen Sie Zeilenkontextinformationen an, wenn mehrere Zeilen, aber kein Skriptname für ConciseView (#10746)
  • Unterstützung für \wsl$\ Pfade zum Dateisystemanbieter hinzufügen (#10674)
  • Fügen Sie den fehlenden Token-Text für TokenKind.QuestionMark im Parser hinzu (#10706)
  • Setze das aktuelle Arbeitsverzeichnis jedes laufenden ForEach-Object -Parallel an denselben Ort wie das aufrufende Skript. (#10672)
  • Ersetzen Sie api-ms-win-core-file-l1-2-2.dll durch Kernell32.dll für die APIs FindFirstStreamW und FindNextStreamW (#10680) (Danke @iSazonov!)
  • Tweak Help Formatting Script, damit es StrictMode-toleranter ist (#10563)
  • Füge -SecurityDescriptorSDDL Parameter zu New-Service hinzu (#10483) (Danke @kvprasoon!)
  • Informationsausgaben entfernen, Ping-Nutzung in Test-Connection konsolidieren (#10478) (Danke @vexx32!)
  • Lies spezielle Reparse-Punkte, ohne sie zu nutzen (#10662) (Danke @iSazonov!)
  • Direct Clear-Host Ausgabe zum Terminal (#10681) (Danke @iSazonov!)
  • Neue Zeile für die Gruppierung mit Format-Table und -Property hinzufügen (#10653)
  • Entfernen Sie [ValidateNotNullOrEmpty] aus -InputObject auf Get-Random, um eine leere Zeichenkette zu ermöglichen (#10644)
  • Mach den Algorithmus des Vorschlagssystems, der String-Distanz groß- und kleinschreibungsunempfindlich ist (#10549) (Danke @iSazonov!)
  • Nullreferenz-Ausnahme in ForEach-Object -Parallel Eingabeverarbeitung beheben (#10577)
  • Hinzufügen von PowerShell-Gruppenrichtlinien-Definitionen (#10468)
  • Aktualisieren Sie den Konsolenhost, um XTPUSHSGR/XTPOPSGR VT-Steuerungssequenzen zu unterstützen, die in Komposierbarkeitsszenarien verwendet werden. (#10208)
  • Fügen Sie den WorkingDirectory-Parameter zu Start-Job (#10324) hinzu (Danke @davinci26!)
  • Entferne den Ereignishandler, der dazu führte, dass Breakpoint-Änderungen fälschlicherweise auf den Host-Runspace-Debugger übertragen wurden (#10503) (Danke @KirkMunro!)
  • Ersetzen Sie api-ms-win-core-job-12-1-0.dll durch Kernell32.dll in Microsoft.PowerShell.Commands.NativeMethods P/Invoke API(#10417) (Danke @iSazonov!)
  • Falsche Ausgabe für New-Service bei der Variablenzuweisung und -OutVariable korrigieren (#10444) (Danke @kvprasoon!)
  • Globale Werkzeugprobleme bezüglich Exit-Code, Kommandozeilenparametern und Pfad mit Leerzeichen beheben (#10461)
  • Rekursion in OneDrive beheben – FindFirstFileEx() in den SafeFindHandle-Typ (#10405) ändern
  • Überspringe das automatische Laden von PSReadLine unter Windows, wenn der NVDA-Bildschirmleser aktiv ist (#10385)
  • Erweiterung der Built-with-PowerShell-Modul-Versionen auf 7.0.0.0 (#10356)
  • Fügen Sie ein Fehler in Add-Type hinzu, falls bereits ein Typ mit demselben Namen existiert (#9609) (Danke @iSazonov!)

Leistung

  • Vermeiden Sie die Verwendung von Closure in Parser.SaveError (#11006)
  • Verbessern Sie das Caching beim Erstellen neuer Regex-Instanzen (#10657) (Danke @iSazonov!)
  • Verbesserung der Verarbeitung der in PowerShell integrierten Typdaten von types.ps1xml, typesV3.ps1xml und GetEvent.types.ps1xml (#10898)
  • Aktualisieren Sie PSConfiguration.ReadValueFromFile, um es schneller und speichereffizienter zu machen (#10839)
  • Fügen Sie kleinere Leistungsverbesserungen für die Laufzeitinitialisierung hinzu (#10569) (Danke @iSazonov!)
  • Mach ForEach-Object für die häufig verwendeten Szenarien schneller (#10454) und behebe ForEach-Object -Parallel Leistungsproblem mit vielen Runspaces (#10455)

Codebereinigung

  • Kommentar und Elementtext ändern, um den Microsoft-Standards zu entsprechen (#11304)
  • Aufräumstilprobleme in Compiler.cs (#10368) (Danke @iSazonov!)
  • Entferne den ungenutzten Typkonverter für CommaDelimitedStringCollection (#11000) (Danke @iSazonov!)
  • Aufräumstil in InitialSessionState.cs (#10865) (Danke @iSazonov!)
  • Code-Bereinigung für PSSession-Kurs (#11001)
  • Entferne die nicht funktionierende Funktion 'Lauf Update-Help Get-Help, wenn Get-Help zum ersten Mal läuft' (#10974)
  • Stilprobleme beheben (#10998) (Danke @iSazonov!)
  • Aufräumen: Verwenden Sie das eingebaute Typalias (#10882) (Danke @iSazonov!)
  • Entferne die ungenutzte Einstellungstaste ConsolePrompting und vermeide unnötige String-Erstellung beim Abfragen der ExecutionPolicy-Einstellung (#10985)
  • Update-Benachrichtigungscheck für tägliche Builds deaktivieren (#10903) (Danke @bergmeister!)
  • Wiederherstellung der Debugging-API verloren in #10338 (#10808)
  • Entfernen Sie die nicht mehr verwendete WorkflowJobSourceAdapter-Referenz (#10326) (Danke @KirkMunro!)
  • Bereinigung der COM-Schnittstellen im Sprunglistencode durch Korrektur von PreserveSig-Attributen (#9899) (Danke @weltkante!)
  • Füge einen Kommentar hinzu, der beschreibt, warum -ia nicht der Alias für -InformationAction gemeinsamen Parameter ist (#10703) (Danke @KirkMunro!)
  • Umbenennen InvokeCommandCmdlet.cs in InvokeExpressionCommand.cs (#10659) (Danke @kilasuit!)
  • Fügen Sie kleinere Code-Bereinigungen im Zusammenhang mit Update-Benachrichtigungen hinzu (#10698)
  • Entferne veraltete Workflow-Logik aus den Remote-Setup-Skripten (#10320) (Danke @KirkMunro!)
  • Aktualisieren Sie das Hilfeformat auf den richtigen Fall (#10678) (Danke @tnieto88!)
  • Beseitigung von CodeFactor-ähnlichen Problemen im letzten Monat in Comits (#10591) (Danke @iSazonov!)
  • Tippfehler in der Beschreibung der PSTernaryOperator-Experimentfunktion (#10586) korrigiert (Danke @bergmeister!)
  • Konvertiere ActionPreference.Suspend-Enumerationswert in einen nicht unterstützten, reservierten Zustand und entferne die Beschränkung bei der Nutzung von ActionPreference.Ignoriere in Präferenzvariablen (#10317) (Danke @KirkMunro!)
  • Ersetze ArrayList durch List<T> , um lesbareren und zuverlässigeren Code zu erhalten, ohne die Funktionalität zu ändern (#10333) (Danke @iSazonov!)
  • Erstellen Sie Code-Style-Fixes für TestConnectionCommand (#10439) (Danke @vexx32!)
  • Cleanup AutomationEngine entfernen und zusätzlichen SetSessionStateDrive-Methodenaufruf entfernen (#10416) (Danke @iSazonov!)
  • Umbennen von Standard-ParameterSetName für ConvertTo-Csv und ConvertFrom-Csv (#10425) wieder in Delimiter

Tools

  • Fügen Sie die Standardeinstellung für die SDKToUse-Eigenschaft hinzu, sodass sie in VS eingebaut wird (#11085)
  • Install-Powershell.ps1: Parameter hinzufügen, um die MSI-Installation zu verwenden (#10921) (Danke @MJECloud!)
  • Fügen Sie grundlegende Beispiele für install-powershell.ps1 hinzu (#10914) (Danke @kilasuit!)
  • Lass Install-PowerShellRemoting.ps1 leere Zeichenkette im PowerShellHome-Parameter (#10526) handhaben (Danke @Orca88!)
  • Wechsel von /etc/lsb-release zu /etc/os-release in install-powershell.sh (#10773) (Danke @Himura2la!)
  • Überprüfe pwsh.exe und pwsh in der täglichen Version unter Windows (#10738) (Danke @centreboard!)
  • Entfernen Sie unnötigen Wasserhahn in installpsh-osx.sh (#10752)
  • Update install-powershell.ps1, um den bereits installierten täglichen Build zu überprüfen (#10489)

Tests

  • Machen Sie den unzuverlässigen DSC-Test ausstehend (#11131)
  • Stringdata-Test beheben, um die Schlüssel von Hashtables korrekt zu validieren (#10810)
  • Entlastungstestmodule (#11061) (Danke @iSazonov!)
  • Verlängerung der Zeit zwischen den Wiederholungen der Test-URL (#11015)
  • Aktualisieren Sie Tests, um Testaktionen genau zu beschreiben. (#10928) (Danke @romero126!)
  • Überspringe vorübergehend den unzuverlässigen Test TestAppDomainProcessExitEvenHandlerNotLeaking (#10827)
  • Mache den Ereignishandler-Lecktest stabil (#10790)
  • Synchronisierung von Großschreibung in CI YAML (#10767) (Danke @RDIL!)
  • Hinzufügungstest für die Event-Handler-Leck-Korrektur (#10768)
  • Fügen Sie Get-ChildItem Test hinzu (#10507) (Danke @iSazonov!)
  • Ersetze mehrdeutige Sprache für Tests von Switch zu Parameter für Genauigkeit (#10666) (Danke @romero126!)
  • Fügen Sie experimentellen Check zu ForEach-Object -Parallel Tests hinzu (#10354) (Danke @KirkMunro!)
  • Aktualisierungstests für die Validierung von Alpine (#10428)

Build- und Paketverbesserungen

  • Beheben Sie Nuget-Paket-Signierung für Coordinated Package-Build (#11316)
  • Update Abhängigkeiten aus PowerShell Gallery und NuGet (#11323)
  • Microsoft.ApplicationInsights von 2.11.0 auf 2.12.0 (#11305) erhöhen
  • Microsoft.CodeAnalysis.CSharp von 3.3.1 auf 3.4.0 (#11265) erhöhen
  • Aktualisiert Pakete für Debian 10 und 11 (#11236)
  • Aktivieren Sie nur experimentelle Funktionen vor RC (#11162)
  • Aktualisierung der macOS-Mindestversion (#11163)
  • Verschieben Sie NJsonSchema vom 27.10.07 auf den 28.10.00 (#11170)
  • Aktualisierung der Links in README.md und metadata.json für Preview.5 (#10854)
  • Wählen Sie die Dateien für Compliance-Tests aus, die PowerShell gehören (#10837)
  • Erlaube der Erstellung eines win7x86 msix-Pakets. (Intern 10515)
  • Erlauben Sie es, semantische Versionen an die Funktion NormalizeVersion zu übertragen (#11087)
  • Erhöht das .NET Core Framework auf 3.1-preview.3 (#11079)
  • PSReadLine von 2.0.0-beta5 auf 2.0.0-beta6 in /src/Modules (#11078) erhöhen
  • Erhöhen Sie Newtonsoft.Json von 12.0.2 auf 12.0.3 (#11037) (#11038)
  • Fügen Sie Debian 10, 11 und CentOS 8 Pakete hinzu (#11028)
  • Laden Sie Build-Info Json-Datei mit dem Feld ReleaseDate hoch (#10986)
  • Erhöht das .NET Core Framework auf 3.1-preview.2 (#10993)
  • Build des x86 MSIX-Pakets aktivieren (#10934)
  • Aktualisieren Sie die URL des dotnet SDK Installationsskripts in build.psm1 (#10927)
  • Bump Markdig. Unterschrieben vom 17.0.1 bis 18.0.0 (#10887)
  • ThreadJob von 2.0.1 auf 2.0.2 (#10886)
  • Aktualisieren Sie das AppX-Manifest und das Verpackungsmodul, um den Anforderungen des MS Store zu entsprechen (#10878)
  • Update Package Reference für PowerShell SDK auf preview.5 (Internal 10295)
  • Update ThirdPartyNotices.txt (#10834)
  • Microsoft.PowerShell.Native auf 7.0.0-preview.3 (#10826) verschieben
  • Microsoft.ApplicationInsights von 2.10.0 auf 2.11.0 (#10608) erhöhen
  • Verschiebe NJsonSchema von 10.0.24 auf 10.0.27 (#10756)
  • MacPorts-Unterstützung zum Build-System hinzufügen (#10736) (Danke @Lucius-Q-User!)
  • Bump PackageManagement von 1.4.4 auf 1.4.5 (#10728)
  • Erhöhen Sie NJsonSchema von 10.0.23 auf 10.0.24 (#10635)
  • Fügen Sie die Umgebungsvariable hinzu, um die Client/Server-Telemetrie in MSI zu unterscheiden (#10612)
  • PSDesiredStateConfiguration von 2.0.3 auf 2.0.4 (#10603) erhöhen
  • Microsoft.CodeAnalysis.CSharp von 3.2.1 auf 3.3.1 (#10607) verschieben
  • Update auf .Net Core 3.0 RTM (#10604) (Danke @bergmeister!)
  • Aktualisieren Sie die MSIX-Verpackung, sodass die Version den Anforderungen des Windows Store entspricht (#10588)
  • PowerShellGet-Version von 2.2 auf 2.2.1 (#10382) erhöhen
  • Bump PackageManagement-Version von 1.4.3 auf 1.4.4 (#10383)
  • Update README.md und metadata.json für 7.0.0-preview.4 (Intern 10011)
  • Upgrade der .Net Core 3.0 Version von Preview 9 auf RC1 (#10552) (Danke @bergmeister!)
  • ExperimentalFeature-Listengenerierung beheben (Intern 9996)
  • Erhöhung der PSReadLine-Version von 2.0.0-beta4 auf 2.0.0-beta5 (#10536)
  • Fixe das Release-Build-Skript, um das Release-Tag festzulegen
  • Aktualisierung der Version von Microsoft.PowerShell.Native auf 7.0.0-preview.2 (#10519)
  • Upgrade auf Netcoreapp3.0 preview9 (#10484) (Danke @bergmeister!)
  • Stelle sicher, dass der täglich koordinierte Build weiß, dass es ein täglicher Build ist (#10464).
  • Aktualisieren Sie den kombinierten Package-Build, um die täglichen Builds (#10449) freizugeben
  • Appveyor-Referenz entfernen (#10445) (Danke @RDIL!)
  • Verschiebe die NJsonSchema-Version von 10.0.22 auf 10.0.23 (#10421)
  • Entferne die Löschung des linux-x64-Build-Ordners, da einige Abhängigkeiten für Alpine dies benötigen (#10407)

Dokumentation und Hilfeinhalte

  • Refaktorisiert Change Logs pro Release in ein Log (#11165)
  • Beheben Sie FWLinks für PowerShell 7 Online-Hilfedokumente (#11071)
  • Update CONTRIBUTING.md (#11096) (Danke @mklement0!)
  • Installationsdokumentationslinks in README.md beheben (#11083)
  • Fügt Beispiele zu install-powershell.ps1 Skript hinzu (#11024) (Danke @kilasuit!)
  • Korrektur Select-String Betonung und Import-DscResource in CHANGELOG.md (#10890)
  • Entferne den veralteten Link von powershell-beginners-guide.md (#10926)
  • Zusammenführen von Stabil- und Service-Änderungsprotokollen (#10527)
  • Update verwendet die .NET-Version in der Build-Dokumentation (#10775) (Danke @Greg-Smulko!)
  • Ersetze Links von MSDN zu Microsoft Learn in powershell-beginners-guide.md (#10778) (Danke @iSazonov!)
  • Fehlerhafter DSC-Übersichtslink behoben (#10702)
  • Aktualisieren Sie Support_Question.md, um auf Stack Overflow als weitere Community-Ressource zu verlinken (#10638) (Danke @mklement0!)
  • Prozessorarchitektur zur Vorlage für Verteilungsanfragen hinzufügen (#10661)
  • Fügen Sie neues PowerShell MoL-Buch zu den PowerShell-Dokumenten zum Lernen der PowerShell-Dokumentation hinzu (#10602)
  • Aktualisierung README.md und Metadaten für v6.1.6 und v6.2.3 Releases (#10523)
  • Einen Tippfehler in README.md korrigieren (#10465) (Danke @vedhasp!)
  • Füge eine Referenz zum PSKoans-Modul in der Learning Resources-Dokumentation hinzu (#10369) (Danke @vexx32!)
  • Update README.md und metadata.json für 7.0.0-preview.3 (#10393)