Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
*-PSBreakpointCmdlets hinzuzufügen. Der Runspace-Parameter spezifiziert ein Runspace-Objekt , das mit Breakpoints im angegebenen Runspace interagiert.
- PowerShell 7.1 erweitert diese experimentelle Funktion, um den Runspace-Parameter zu allen
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
-replaceOperatoranweisung 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"TrueKorrektur
$?, dass es nicht mehr ist$false, wenn der native Befehl aufstderr(#13395) schreibt.Es ist üblich, dass native Befehle geschrieben werden
stderr, ohne einen Fehler anzuzeigen. Mit dieser Änderung$?wird nur dann$falsegesetzt, wenn der native Befehl auch einen von null verschiedenen Ausgangscode hat. Diese Änderung steht in keinem Zusammenhang mit dem experimentellen MerkmalPSNotApplyErrorActionToStderr.Machen Sie
$ErrorActionPreferencedie Ausgabe nativer Befehle nicht beeinflussenstderr(#13361)Es ist üblich, dass native Befehle geschrieben werden
stderr, ohne einen Fehler anzuzeigen. Mit dieser Änderungstderrwird die Ausgabe weiterhin in ErrorRecord-Objekten erfasst, aber die Laufzeit gilt$ErrorActionPreferencenicht mehr, wenn der ErrorRecord von einem nativen Befehl stammt.Umbennen auf an,
Get-Dateum Unix-Zeiteingabe zu ermöglichen (#13084) (Danke-UnixTimeSeconds-FromUnixTime@aetos382!)Der Parameter
-FromUnixTimewurde 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 AMErlaube 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
$argsParameter 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
-Pathgebunden, da es das dritte Argument in der Argumentliste ist. ## Also wird es zusammen mit '$args zusammen mit ' gestopftBlah = "World"PS> $hash = @{ Name = "Hello"; Blah = "World" } PS> SimpleTest @hash "MyPath" Name: Hello; Path: ; Args: -Blah: World MyPathMit dieser Änderung werden die Argumente aus
@hashans 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: WorldMach den Schalterparameter
-Qualifierfür (#12960) nicht positionsbezogen (Split-PathDanke)@yecril71pl!)Lösen Sie das Arbeitsverzeichnis als literalen Pfad auf, wenn
Start-Processes nicht angegeben ist (#11946) (Danke @NoMoreFood!)Stellen Sie Parameter in Web-Cmdlets so ein,
-OutFiledass sie funktionieren wie-LiteralPath(#11701) (Danke @iSazonov!)Fix-String-Parameterbindung für
BigIntegernumerische Literale (#11634) (Danke @vexx32!)Unter Windows
Start-Processwird eine Prozessumgebung mit allen Umgebungsvariablen aus der aktuellen Sitzung-UseNewEnvironmenterstellt und eine neue Standardprozessumgebung erstellt (#10830) (Danke) @iSazonov!)"Nicht umwickeln" return-Ergebnis in
PSObjectbei der Umwandlung einesScriptBlockin einen Delegierten (#10619)Wenn a
ScriptBlockin einen Delegate-Typ konvertiert wird, der im C#-Kontext verwendet werden soll, bringt das Umpacken des Ergebnisses in aPSObjectunnötige Probleme mit sich:- Wenn der Wert in den Delegate-Rückgabe-Typ umgewandelt wird, wird der
PSObjectim Wesentlichen entpackt. Das istPSObjectalso unnötig. - Wenn der Delegate-Return-Typ ist
object, wird er in einPSObjectgewickelt, was die Arbeit im C#-Code erschwert.
Nach dieser Änderung ist das zurückgegebene Objekt das zugrundeliegende Objekt.
- Wenn der Wert in den Delegate-Rückgabe-Typ umgewandelt wird, wird der