Co nowego w programie PowerShell 7.5
PowerShell 7.5.0 zawiera następujące funkcje, aktualizacje i zmiany niekompatybilne. Program PowerShell 7.5 jest oparty na wersji ogólnodostępnej .NET 9.0.1.
Aby uzyskać pełną listę zmian, zobacz CHANGELOG w repozytorium GitHub. Aby uzyskać więcej informacji na temat platformy .NET 9, zobacz [Co nowego na platformie .NET 9][07].
Zmiany powodujące niezgodność
- Poprawka
-OlderThan
i parametry dotyczące-NewerThan
używaniaTest-Path
iPathType
zakresu dat (#20942) (Dzięki@ArmaanMcleod!)- Poprzednio
-OlderThan
byłoby ignorowane, jeśli określono razem
- Poprzednio
- Zmień
New-FileCatalog -CatalogVersion
wartość domyślną na 2 (#20428) (Dziękujemy)@ThomasNieto!) - Blokuj uzyskiwanie pomocy z lokalizacji sieciowych w sesjach z ograniczeniami komunikacji wirtualnej (#20593)
- Instalator Windows zapamiętuje teraz używane opcje instalacji i używa ich do inicjowania opcji następnej instalacji (#20420) (Dzięki@reduckted!)
-
ConvertTo-Json
teraz serializujeBigInteger
jako liczbę (#21000) (dzięki@jborean93!) - Program .NET 9 usunął implementację
BinaryFormatter
, powodując regresję w poleceniu cmdletOut-GridView
. Funkcja wyszukiwaniaOut-GridView
nie działa w programie PowerShell 7.5. Ten problem jest śledzony w Problem #24749.
Zaktualizowane moduły
Program PowerShell 7.5.0 zawiera następujące zaktualizowane moduły:
- Microsoft.PowerShell.PSResourceGet 1.1.0
- PSReadLine w wersji 2.3.6
Ulepszenia uzupełniania kart
Wiele dzięki @ArmaanMcleod i innym osobom za całą swoją pracę w celu ulepszenia ukończenia karty.
- Powrót do wnioskowania typu, gdy nie można pobrać wartości klucza tabeli skrótu z bezpiecznego wyrażenia (#21184) (Dzięki@MartinGC94!)
- Napraw regresję podczas wnioskowania typu dla
$_
(#21223) (Dzięki@MartinGC94!) - Rozwiń
~
pozycję$home
w systemie Windows z uzupełnianiem karty (#21529) - Nie należy wykonywać podczas deklarowania nazwy parametru i składowej klasy (#21182) (dzięki@MartinGC94!)
- Zapobiegaj uzupełnianiu plików podczas kończenia nazw typów na karcie (#20084) (Dziękujemy)@MartinGC94)
- Dodawanie elementu completer argumentu do
-Version
elementu dla (Set-StrictMode
#20554) (Dziękujemy)@ArmaanMcleod!) - Dodawanie
-Verb
narzędzia do uzupełniania argumentów iGet-Verb
/Get-Command
refaktoryzacjiGet-Verb
(#20286) (dzięki@ArmaanMcleod) - Dodawanie
-Verb
elementu completer argumentu dla (Start-Process
#20415) (Dziękujemy)@ArmaanMcleod) - Dodawanie
-Scope
modułu uzupełniania argumentów dla*-Variable
poleceń i*-Alias
*-PSDrive
(#20451) (dziękujemy)@ArmaanMcleod) - Dodawanie
-Module
uzupełniania poleceńSave-Help
/Update-Help
(#20678) (Dziękujemy@ArmaanMcleod)
Nowe polecenia cmdlet
- Dodawanie
ConvertTo-CliXml
poleceń cmdlet iConvertFrom-CliXml
(#21063) (dziękujemy)@ArmaanMcleod!)
Ulepszenia poleceń cmdlet sieci Web
- Poprawka umożliwiająca współdziałanie
-PassThru
i-Outfile
(#24086) - Dodaj właściwość
OutFile
wWebResponseObject
(#24047) - Pokaż nazwę pliku w
Invoke-WebRequest -OutFile -Verbose
(#24041) - Napraw polecenie WebCmdlets, gdy
-Body
jest określony, aleContentType
nie jest (#23952) (dziękujemy)@CarloToso!) - Poprawka
Invoke-WebRequest
do raportowania poprawnego rozmiaru, gdy-Resume
jest określony (#20207) (Dzięki@LNKLEO!) - Naprawianie poleceń cmdlet sieci Web w celu umożliwienia poprawnej
WinForm
pracy aplikacji (#20606)
Inne ulepszenia poleceń cmdlet
- Włącz
-NoRestart
pracę zRegister-PSSessionConfiguration
programem (#23891) - Dodawanie
IgnoreComments
poleceń cmdlet (AllowTrailingCommas
) iTest-Json
opcje (dzięki)@ArmaanMcleod!) - Polecenie Get-Help może zgłaszać parametry z atrybutem
ValueFromRemainingArguments
jako w stanie potoku (#23871) - Zmień typ na
LineNumber
ulong
w (Select-String
#24075) (Dziękujemy@Snowman-25!) -
Get-Process
: Usuń wymaganie administratora dla-IncludeUserName
(#21302) (Dziękujemy@jborean93!) - Poprawka sprawdzania
Test-Path -IsValid
nieprawidłowych znaków ścieżki i nazwy pliku (#21358) - Dodawanie
RecommendedAction
doConciseView
raportowania błędów (#20826) (dzięki@JustinGrote!) - Dodano pasek postępu dla
Remove-Item
polecenia cmdlet (#20778) (Dziękujemy)@ArmaanMcleod!) - Poprawka
Test-Connection
spowodowana zmianami platformy .NET 8 (#20369) - Naprawianie
Get-Service
komunikatu o błędzie bez zakończenia w celu uwzględnienia kategorii (#20276) - Dodawanie
-Empty
parametrów i-InputObject
doNew-Guid
(#20014) (Dziękujemy)@CarloToso!) - Dodaj alias
r
do parametru-Recurse
Get-ChildItem
dla polecenia (#20100) (Dzięki@kilasuit!) - Dodaj
LP
doLiteralPath
aliasów dla funkcji, które nadal jej brakuje (#20820) - Dodaj niejawną lokalizację rezerwową do
Import-LocalizedData
(#19896) (Dzięki@chrisdent-de!) - Dodaj
Aliases
do właściwości wyświetlanych podczas formatowania zawartości pomocy parametru zwróconego przezGet-Help
(#20994) - Dodaj
HelpUri
doRemove-Service
(#20476) - Naprawa awarii uzupełniania dostawcy SCCM (#20815, #20919, #20915) (Dziękujemy) @MartinGC94!)
- Naprawianie regresji w
Get-Content
przypadku, gdy-Tail 0
i-Wait
są używane razem (#20734) (dzięki@CarloToso!) - Poprawka
Start-Process -PassThru
, aby upewnić się, żeExitCode
właściwość jest dostępna dla zwróconegoProcess
obiektu (#20749) (Dzięki@CodeCyclone!) - Poprawka
Group-Object
służąca do używania bieżącej kultury dla danych wyjściowych (#20608) - Naprawianie
Group-Object
danych wyjściowych przy użyciu ciągów interpolowanych (#20745) (dziękujemy)@mawosoft!) - Naprawiono renderowanie
DisplayRoot
elementu dla sieciPSDrive
(#20793) - Poprawka
Copy-Item
postępu pokazywania tylko po skopiowaniu wszystkich plików (#20517) - Napraw regresję ukończenia ścieżki UNC (#20419) (dzięki@MartinGC94!)
- Zgłoś błąd, jeśli jest przekazywany nieprawidłowy
-ExecutionPolicy
dopwsh
(#20460) - Dodawanie modułów WinGetCommandNotFound i CompletionPredictor w celu śledzenia użycia (#21040)
- Dodaj parametr DateKind do (
ConvertFrom-Json
#20925) (Dziękujemy)@jborean93!) - Dodawanie informacji o katalogu do parametru OutputType dla nowego elementu (#21126) (dziękujemy)@MartinGC94!)
- Naprawianie
Get-Error
serializacji wartości tablicy (#21085) (Dzięki@jborean93!) - Poprawka
Test-ModuleManifest
umożliwiająca używanie ścieżki UNC (#24115) - Poprawka
Get-TypeData
zapisu w potoku natychmiast zamiast zbierania danych najpierw (#24236) (dzięki@MartinGC94) - Dodaj
-Force
parametr doResolve-Path
poleceń cmdlet iConvert-Path
, aby obsługiwać ukryte pliki z symbolami wieloznacznymi #20981 (dzięki @ArmaanMcleod!)
Ulepszenia aparatu
- Jawne uruchamianie i zatrzymywanie koloru błędu ANSI (#24065) (dziękujemy)@JustinGrote!)
- Ulepszanie definicji przeciążenia platformy .NET metod ogólnych (#21326) (dzięki@jborean93!)
- Zoptymalizuj operację
+=
dla kolekcji, gdy jest to tablica obiektów (#23901) (Dzięki@jborean93!) - Dodawanie telemetrii w celu sprawdzenia określonych tagów podczas importowania modułu (#20371)
- Dodawanie
PSAdapter
iConsoleGuiTools
ładowanie do modułu listy dozwolonych danych telemetrycznych (#20641) - Dodawanie modułu WinGet w celu śledzenia użycia (#21040)
- Upewnij się, że nazwa pliku nie ma wartości null podczas rejestrowania zdarzeń WDAC ETW (#20910) (Dzięki@jborean93!)
- Naprawiono cztery regresje wprowadzone przez funkcję rejestrowania WDAC (#20913)
- Pozostaw niezastawioną obsługę danych wejściowych, wyjściowych i błędów, gdy nie są przekierowywane (#20853)
- Napraw niejawne polecenia cmdlet serwera proxy komunikacji wirtualnej, aby działały na typowych parametrach (#20367)
- Dołącz wersję modułu w komunikatach o błędach, gdy moduł nie zostanie znaleziony (#20144) (dziękujemy)@ArmaanMcleod!)
- Poprawka
unixmode
do obsługisetuid
isticky
braku pliku wykonywalnego (#20366) - Poprawka przy użyciu zestawu do używania metody Path.Combine podczas konstruowania ścieżek zestawów (#21169)
- Zweryfikuj wartość dla używania przestrzeni nazw podczas kontroli semantycznych, aby zapobiec deklarowaniu nieprawidłowych przestrzeni nazw (#21162)
- Obsługa narzędzia globalnego specjalnie podczas dołączania
$PSHome
do ścieżki (#24228)
Funkcje eksperymentalne
Następujące funkcje eksperymentalne zostały przekonwertowane na funkcje podstawowe w programie PowerShell 7.5-rc.1:
W programie PowerShell 7.5-rc.1 znajdują się następujące funkcje eksperymentalne:
- PSRedirectToVariable — zezwalaj na przekierowywanie do zmiennej (#20381)
- PSNativeWindowsTildeExpansion — dodawanie rozszerzenia tyldy dla natywnych plików wykonywalnych systemu Windows (#20402) (dzięki@domsleee!)
-
PSSerializeJSONLongEnumAsNumber -
ConvertTo-Json
traktuje teraz duże wyliczenia jako liczby (#20999) (Dzięki@jborean93!)
Ulepszenia wydajności
Program PowerShell 7.5-rc.1 zawierał żądanie ściągnięcia nr 23901 z @jborean93, który poprawia wydajność operacji +=
dla tablicy obiektów.
Poniższy przykład mierzy wydajność dla różnych metod dodawania elementów do tablicy.
$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
}
Po uruchomieniu skryptu w programie PowerShell 7.4.6 zobaczysz, że użycie operatora +=
jest najwolniejszą metodą.
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
Po uruchomieniu skryptu w programie PowerShell 7.5-rc.1 zobaczysz, że użycie operatora +=
jest znacznie szybsze niż program PowerShell 7.4.6. Teraz jest ona również szybsza niż użycie metody List<T>.Add(T)
.
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
[07]: /dotnet/core/whats-new/dotnet-9/overview)