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.
PowerShell 7.5.4 enthält die folgenden Features, Updates und bahnbrechende Änderungen. PowerShell 7.5.4 basiert auf .NET 9.0.306-Version.
Eine umfassende Liste der Änderungen finden Sie im Änderungsprotokoll im GitHub-Repository. Weitere Informationen zu .NET 9 finden Sie unter Neuigkeiten in .NET 9.
Aktuelle Änderungen
- Die Parameter
-OlderThanund-NewerThanwerden fürTest-Pathbei Verwendung vonPathTypeund des Datumsbereichs behoben. (#20942) (Danke an @ArmaanMcleod!)- Zuvor wäre
-OlderThanignoriert worden, wenn diese zusammen angegeben worden wären.
- Zuvor wäre
- Ändern Sie den Standardwert
New-FileCatalog -CatalogVersionin 2 (#20428) (Danke an @ThomasNieto!) - Blockieren von Hilfe von Netzwerkstandorten in eingeschränkten Remotingsitzungen (#20593)
- Das Windows-Installationsprogramm merkt sich jetzt die verwendeten Installationsoptionen und verwendet sie zum Initialisieren von Optionen für die nächste Installation (#20420) (Vielen Dank @reduckted!)
-
ConvertTo-JsonserialisiertBigIntegerjetzt als Zahl (#21000) (Danke @jborean93!)
Aktualisierte Module
PowerShell 7.5.4 enthält die folgenden aktualisierten Module:
- Microsoft.PowerShell.PSResourceGet v1.1.1
- PSReadLine v2.3.6
Verbesserungen bei der TAB-Vervollständigung
Vielen Dank an @ArmaanMcleod und alle anderen für die Verbesserung der Vervollständigung mit der TAB-Taste.
- Zurückfallen auf Typinferenzen, wenn der Hashtable-Schlüsselwert aus einem sicheren Ausdruck nicht abgerufen werden kann (#21184) (Danke @MartinGC94!)
- Beheben der Regression beim Ausführen der Typrückleitung für
$_(#21223) (Danke) @MartinGC94!) - Erweitern
~auf$HOMEWindows mit Abschluss der Registerkarte (#21529) - Führen Sie den Vorgang beim Deklarieren des Parameternamens und des Klassenmememers (#21182) (Danke) nicht aus. @MartinGC94!)
- Verhinderung eines Fallbacks auf den Dateiabschluss bei Vervollständigung mit der TAB-TASTE bei Typnamen (#20084) (Danke an @MartinGC94)
- Argumentvervollständigung zu
-VersionfürSet-StrictModehinzugefügt (#20554) (Danke an @ArmaanMcleod!) -
-Verb-Argumentvervollständigung fürGet-Verb/Get-Commandhinzugefügt undGet-Verbumgestaltet (#20286) (Danke an @ArmaanMcleod) -
-Verb-Argumentvervollständigung fürStart-Processhinzugefügt (#20415) (Danke an @ArmaanMcleod) -
-Scope-Argumentvervollständigung für die Befehle*-Variable,*-Alias&*-PSDrivehinzugefügt (#20451) (Danke an @ArmaanMcleod) -
-Module-Abschluss für dieSave-Help/Update-Help-Befehle hinzugefügt (#20678) (Danke @ArmaanMcleod)
Neue Cmdlets
- Cmdlets
ConvertTo-CliXmlundConvertFrom-CliXmlhinzugefügt (#21063) (Danke an @ArmaanMcleod!)
Verbesserungen bei Web-Cmdlets
- Korrektur, damit
-PassThruund-Outfilezusammen funktionieren (#24086) - Hinzufügen der Eigenschaft
OutFileinWebResponseObject(#24047) - Dateiname in
Invoke-WebRequest -OutFile -Verboseanzeigen (#24041) - Problembehebung für WebCmdlets, wenn
-Bodyangegeben ist, aberContentTypenicht (#23952) (Danke an @CarloToso!) - Behoben:
Invoke-WebRequestzeigt nun die richtige Größe an, wenn-Resumeangegeben wird (#20207) (Danke an @LNKLEO!). - Behoben: Web-Cmdlets lassen nun zu, dass
WinForm-Apps ordnungsgemäß arbeiten (#20606).
Weitere Verbesserungen an Cmdlets
- Behebung
Out-GridViewdurch Ersetzen der Verwendung veralteterBinaryFormatterImplementierung durch benutzerdefinierte Implementierung (#25559) - Ermöglicht, dass
-NoRestartmitRegister-PSSessionConfigurationfunktioniert (#23891) - Die Optionen
IgnoreCommentsundAllowTrailingCommaswurden demTest-Json-Cmdlet hinzugefügt (#23817) (Danke an @ArmaanMcleod!) - Get-Help meldet Parameter mit dem Attribut
ValueFromRemainingArgumentsmöglicherweise als pipelinefähig (#23871) - Ändern des Typs
LineNumbervonulonginSelect-String(#24075) (Danke an @Snowman-25!) -
Get-Process: Administratoranforderung für-IncludeUserName(#21302) entfernen (Vielen Dank @jborean93!) - Fehler
Test-Path -IsValidbeim Überprüfen auf ungültige Pfad- und Dateinamenzeichen (#21358) - Hinzufügen
RecommendedActionzurConciseViewFehlerberichterstattung (#20826) (Danke @JustinGrote!) - Statusleiste für
Remove-ItemCmdlet (#20778) hinzugefügt (Danke) @ArmaanMcleod!) - Behoben:
Test-Connectionaufgrund von .NET 8-Änderungen (#20369) - Behoben:
Get-Service-Fehlermeldung ohne Abbruch, um die Kategorie einzuschließen (#20276) - Zu
-Emptywerden die Parameter-InputObjectundNew-Guidhinzugefügt. (#20014) (Vielen Dank an @CarloToso!)) - Der Alias
rwird dem Parameter-Recursefür denGet-ChildItem-Befehl hinzugefügt (#20100) (Danke an @kilasuit!). -
LPwird denLiteralPath-Aliasen hinzugefügt, da Funktionen dies nicht aufweisen (#20820). - Lokalisierungsfallback wird
Import-LocalizedDatahinzugefügt (#19896) (Danke an @chrisdent-de!). -
Aliaseswird den Eigenschaften hinzugefügt, die angezeigt werden, wenn der Hilfeinhalt des vonGet-Helpzurückgegebenen Parameters formatiert wird (#20994). -
HelpUriwird zuRemove-Servicehinzugefügt (#20476). - Behoben: Abschlussabsturz für den SCCM-Anbieter (#20815, #20919, #20915) (Danke an @MartinGC94!)
- Behoben: Regression in
Get-Content, wenn-Tail 0und-Waitzusammen verwendet werden (#20734) (Danke an @CarloToso!) - Behoben:
Start-Process -PassThru, um sicherzustellen, dass das ObjektExitCodeauf die EigenschaftProcesszugreifen kann (#20749) (Danke an @CodeCyclone!). - Behoben:
Group-Objectverwendet nun aktuelle Kultur für die Ausgabe (#20608). - Behoben:
Group-Object-Ausgabe verwendet interpolierte Zeichenfolge (#20745) (Danke an @mawosoft!). - Behoben: Rendering von
DisplayRootfür das NetzwerkPSDrive(#20793) - Behoben:
Copy-Item-Fortschritt wird nur als abgeschlossen angezeigt, wenn alle Dateien kopiert wurden (#20517). - Behoben: Regression des UNC-Pfadabschlusses (#20419) (Danke an @MartinGC94!)
- Fehlermeldung, wenn ungültige
-ExecutionPolicyanpwshübergeben wird (#20460) - Hinzufügen der Module WinGetCommandNotFound und CompletionPredictor zum Nachverfolgen der Nutzung (#21040)
- Hinzufügen des Parameters DateKind zu
ConvertFrom-Json(#20925) (Vielen Dank an @jborean93!) - Hinzufügen von DirectoryInfo zum „OutputType“ für „New-Item“ (#21126) (Vielen Dank an @MartinGC94!)
- Problembehebung für die
Get-Error-Serialisierung von Arraywerten (#21085) (Danke an @jborean93!) - Problembehebung für
Test-ModuleManifest, damit ein UNC-Pfad verwendet werden kann (#24115) - Problembehebung für
Get-TypeData, damit sofort in die Pipeline geschrieben wird, anstatt zuerst Daten zu sammeln (#24236) (Danke an @MartinGC94) - Hinzufügen des Parameters
-Forcezu den CmdletsResolve-PathundConvert-Pathzur Unterstützung ausgeblendeter Platzhalterdateien #20981 (Danke an @ArmaanMcleod!) - Standardhandles explizit festlegen beim Starten eines Prozesses mit
-NoNewWindow(#25324) - Machen Sie geschützte, interne, geerbte Instanzmember im Klassenumfang zugänglich. (#25547) (Vielen Dank @mawosoft!)
- Entfernen Sie den alten Fuzzyvorschlag, und korrigieren Sie den Vorschlag für den lokalen Skriptdateinamen (#25330)
- Fixiere
PSMethodInvocationConstraints.GetHashCodeMethode (#25306) (Danke @crazyjncsu!)
Engine-Verbesserungen
- Verschieben der .NET-Methodenaufrufprotokollierung nach Abschluss der erforderlichen Typkonvertierung für Methodenargumente (#25357)
- Rückgriff auf AppLocker nach
WldpCanExecuteFile(#25305) - Explizites Starten und Beenden der ANSI-Fehlerfarbe (#24065) (Danke an @JustinGrote!)
- Verbessern der .NET-Überladungsdefinition generischer Methoden (#21326) (Danke an @jborean93!)
- Optimieren des Vorgangs
+=für eine Auflistung, wenn es sich um ein Objektarray handelt (#23901) (Danke an @jborean93!) - Hinzufügen von Telemetrie, um beim Importieren eines Moduls nach bestimmten Tags zu suchen (#20371)
- Hinzufügen von
PSAdapterundConsoleGuiToolszum Laden der Telemetriepositivliste des Moduls (#20641) - Hinzufügen des WinGet-Moduls zum Nachverfolgen der Nutzung (#21040)
- Sicherstellen, dass der Dateiname nicht NULL ist, wenn WDAC ETW-Ereignisse protokolliert werden (#20910) (Danke an @jborean93!)
- Behoben: Vier Regressionen, die vom WDAC-Protokollierungsfeature eingeführt wurden (#20913)
- Eingabe-, Ausgabe- und Fehlerhandles bleiben nicht festgelegt, wenn sie nicht weitergeleitet werden (#20853).
- Behoben: Implizite Remotingproxy-Cmdlets, die auf allgemeine Parameter reagieren (#20367)
- Modulversion wird in Fehlermeldungen hinzugefügt, wenn das Modul nicht gefunden wird (#20144) (Danke an @ArmaanMcleod!)
- Behoben:
unixmodezur Verarbeitung vonsetuidundsticky, wenn Datei keine ausführbare Datei ist (#20366) - Fix mit Assembly zum Verwenden von Path.Combine beim Erstellen von Assemblypfaden (#21169)
- Überprüfen des Werts für die Verwendung von Namespaces während semantischer Überprüfungen, um die Deklarierung von ungültigen Namespaces zu verhindern (#21162)
- Handhabung des globalen Tools speziell beim Voranstellen von
$PSHOMEin PATH (#24228)
Experimentelle Features
Die folgenden experimentellen Features wurden in Mainstreamfeatures in PowerShell 7.5-rc.1 konvertiert:
Die folgenden experimentellen Features sind in PowerShell 7.5-rc.1 enthalten:
- PSRedirectToVariable – Zulassen der Umleitung zu einer Variablen (#20381)
- PSNativeWindowsTildeExpansion – Tilde-Erweiterung für Windows-native ausführbare Dateien hinzufügen (#20402) (Danke an @domsleee!)
-
PSSerializeJSONLongEnumAsNumber -
ConvertTo-Jsonbehandelt jetzt große Enumerationen als Zahlen (#20999) (Danke an @jborean93!)
Leistungsverbesserungen
PowerShell 7.5-rc.1 enthielt PR#23901 von @jborean93, wodurch die Leistung der +=-Operation für ein Objektarray verbessert wird.
Das folgende Beispiel misst die Leistung verschiedener Methoden, mit denen Elemente einem Array hinzugefügt werden.
$tests = @{
'Direct Assignment' = {
param($count)
$result = foreach($i in 1..$count) {
$i
}
}
'List<T>.Add(T)' = {
param($count)
$result = [Collections.Generic.List[int]]::new()
foreach($i in 1..$count) {
$result.Add($i)
}
}
'Array+= Operator' = {
param($count)
$result = @()
foreach($i in 1..$count) {
$result += $i
}
}
}
5kb, 10kb | ForEach-Object {
$groupResult = foreach($test in $tests.GetEnumerator()) {
$ms = (Measure-Command { & $test.Value -Count $_ }).TotalMilliseconds
[pscustomobject]@{
CollectionSize = $_
Test = $test.Key
TotalMilliseconds = [Math]::Round($ms, 2)
}
[GC]::Collect()
[GC]::WaitForPendingFinalizers()
}
$groupResult = $groupResult | Sort-Object TotalMilliseconds
$groupResult | Select-Object *, @{
Name = 'RelativeSpeed'
Expression = {
$relativeSpeed = $_.TotalMilliseconds / $groupResult[0].TotalMilliseconds
$speed = [Math]::Round($relativeSpeed, 2).ToString() + 'x'
if ($speed -eq '1x') { $speed } else { $speed + ' slower' }
}
} | Format-Table -AutoSize
}
Wenn Sie das Skript in PowerShell 7.4.6 ausführen, sehen Sie, dass die Methode mit dem +=-Operator die langsamste ist.
CollectionSize Test TotalMilliseconds RelativeSpeed
-------------- ---- ----------------- -------------
5120 Direct Assignment 4.17 1x
5120 List<T>.Add(T) 90.79 21.77x slower
5120 Array+= Operator 342.58 82.15x slower
CollectionSize Test TotalMilliseconds RelativeSpeed
-------------- ---- ----------------- -------------
10240 Direct Assignment 0.64 1x
10240 List<T>.Add(T) 184.10 287.66x slower
10240 Array+= Operator 1668.13 2606.45x slower
Wenn Sie das Skript in PowerShell 7.5-rc.1 ausführen, sehen Sie, dass die Verwendung des +=-Operators wesentlich schneller ist als in PowerShell 7.4.6. Das ist jetzt auch schneller als die Verwendung der List<T>.Add(T)-Methode.
CollectionSize Test TotalMilliseconds RelativeSpeed
-------------- ---- ----------------- -------------
5120 Direct Assignment 4.71 1x
5120 Array+= Operator 40.42 8.58x slower
5120 List<T>.Add(T) 92.17 19.57x slower
CollectionSize Test TotalMilliseconds RelativeSpeed
-------------- ---- ----------------- -------------
10240 Direct Assignment 1.76 1x
10240 Array+= Operator 104.73 59.51x slower
10240 List<T>.Add(T) 173.00 98.3x slower