Novinky v PowerShellu 7.5
PowerShell 7.5.0 obsahuje následující funkce, aktualizace a zásadní změny. PowerShell 7.5 je založený na verzi GA .NET 9.0.1.
Úplný seznam změn najdete v protokolu CHANGELOG v úložišti GitHub. Další informace o rozhraní .NET 9 najdete v tématu [Co je nového v .NET 9][07].
Zásadní změny
- Oprava
-OlderThan
a-NewerThan
parametry proTest-Path
použitíPathType
a rozsah dat (#20942) (Děkujeme@ArmaanMcleod!)-
-OlderThan
Dříve by bylo ignorováno, pokud je zadáno společně.
-
- Změna
New-FileCatalog -CatalogVersion
výchozího nastavení na 2 (#20428) (Děkujeme@ThomasNieto!) - Blokování nápovědy k síťovým umístěním v relacích omezené komunikace (#20593)
- Instalační služba systému Windows si teď pamatuje použité možnosti instalace a používá je k inicializaci možností pro další instalaci (#20420) (děkujeme@reduckted!)
-
ConvertTo-Json
nyní serializujeBigInteger
jako číslo (#21000) (Díky@jborean93!) - Rozhraní .NET 9 odebralo implementaci
BinaryFormatter
, což způsobilo regresi v příkazu cmdletOut-GridView
. Funkce vyhledáváníOut-GridView
nefunguje v PowerShellu 7.5. Tento problém se sleduje v Issue #24749.
Aktualizované moduly
PowerShell 7.5.0 obsahuje následující aktualizované moduly:
- Microsoft.PowerShell.PSResourceGet v1.1.0
- PSReadLine v2.3.6
Vylepšení dokončování tabulátoru
Mnoho díky @ArmaanMcleod a ostatním za veškerou práci, aby se zlepšilo dokončování tabulátoru.
- Návrat k odvození typu, pokud nelze hodnotu hashtable klíč-hodnota načíst z bezpečného výrazu (#21184) (Děkujeme@MartinGC94!)
- Oprava regrese při odvozování typu pro
$_
(#21223) (Díky@MartinGC94!) - Rozbalení
~
ve Windows s dokončováním karet ($home
) - Nedokončujte při deklarování názvu parametru a člena třídy (#21182) (Děkujeme@MartinGC94!)
- Zabránění dokončení náhradního souboru při dokončování názvů typů tabulátoru (#20084) (Díky@MartinGC94)
- Přidání dokončování argumentů pro
-Version
Set-StrictMode
(#20554) (Děkujeme@ArmaanMcleod!) - Přidání
-Verb
dokončování argumentů proGet-Verb
/Get-Command
a refaktoringGet-Verb
(#20286) (Děkujeme@ArmaanMcleod) - Přidání
-Verb
dokončování argumentů proStart-Process
(#20415) (Děkujeme@ArmaanMcleod) - Přidání
-Scope
dokončování argumentů pro*-Variable
příkazy*-Alias
a*-PSDrive
příkazy (#20451) (Děkujeme@ArmaanMcleod) - Přidání
-Module
dokončování proSave-Help
/Update-Help
příkazy (#20678) (Děkujeme@ArmaanMcleod)
Nové rutiny
- Přidání
ConvertTo-CliXml
aConvertFrom-CliXml
rutiny (#21063) (děkujeme@ArmaanMcleod!)
Vylepšení webových rutin
- Oprava umožňující spolupráci
-PassThru
a-Outfile
(#24086) - Přidat vlastnost
OutFile
vWebResponseObject
(#24047) - Zobrazit název souboru v
Invoke-WebRequest -OutFile -Verbose
(#24041) - Oprava webCmdlets při
-Body
zadání, aleContentType
není (#23952) (Díky@CarloToso!) - Oprava
Invoke-WebRequest
nahlášení správné velikosti při-Resume
zadání (#20207) (Díky@LNKLEO!) - Oprava webových rutin, aby
WinForm
aplikace fungovaly správně (#20606)
Další vylepšení rutin
- Povolení
-NoRestart
práce sRegister-PSSessionConfiguration
aplikací (#23891) - Přidání
IgnoreComments
aAllowTrailingCommas
možnosti rutinyTest-Json
(#23817) (Děkujeme@ArmaanMcleod!) - Get-Help může hlásit parametry s atributem
ValueFromRemainingArguments
jako kanálem (#23871) - Změnit typ
LineNumber
naulong
inSelect-String
(#24075) (Děkujeme@Snowman-25!) -
Get-Process
: Odebrání požadavku správce pro-IncludeUserName
(#21302) (Děkujeme@jborean93!) - Oprava
Test-Path -IsValid
kontroly neplatných znaků cesty a názvu souboru (#21358) - Přidání
RecommendedAction
doConciseView
hlášení chyb (#20826) (Děkujeme@JustinGrote!) - Přidání indikátoru průběhu pro
Remove-Item
rutinu (#20778) (Děkujeme@ArmaanMcleod!) - Oprava
Test-Connection
kvůli změnám .NET 8 (#20369) - Oprava
Get-Service
neukončující chybové zprávy pro zahrnutí kategorie (#20276) - Přidání
-Empty
a-InputObject
parametry doNew-Guid
aplikace (#20014) (Děkujeme@CarloToso!) - Přidání aliasu
r
k parametru-Recurse
Get-ChildItem
příkazu (#20100) (Děkujeme@kilasuit!) - Přidání
LP
doLiteralPath
aliasů pro funkce stále chybí (#20820) - Přidat implicitní lokalizaci náhradním místem
Import-LocalizedData
(#19896) (Díky@chrisdent-de!) - Přidání
Aliases
do vlastností zobrazených při formátování obsahu nápovědy parametru vráceného uživatelemGet-Help
(#20994) - Přidat
HelpUri
doRemove-Service
(#20476) - Oprava chybového ukončení dokončení pro poskytovatele SCCM (#20815, #20919, #20915) (děkujeme @MartinGC94!)
- Oprava regrese v
Get-Content
případech, kdy-Tail 0
a-Wait
jsou použity společně (#20734) (Díky@CarloToso!) - Oprava
Start-Process -PassThru
, abyste měli jistotu,ExitCode
že je vlastnost přístupná pro vrácenýProcess
objekt (#20749) (Děkujeme@CodeCyclone!) - Oprava
Group-Object
použití aktuální jazykové verze pro výstup (#20608) - Oprava
Group-Object
výstupu pomocí interpolovaných řetězců (#20745) (Děkujeme@mawosoft!) - Oprava vykreslování
DisplayRoot
sítěPSDrive
(#20793) - Oprava
Copy-Item
průběhu zobrazení pouze při kopírování všech souborů (#20517) - Oprava regrese dokončení cesty UNC (#20419) (Díky@MartinGC94!)
- Chyba hlášení, pokud je předána neplatná
-ExecutionPolicy
(pwsh
#20460) - Přidání modulů WinGetCommandNotFound a CompletionPredictor ke sledování využití (#21040)
- Přidání parametru DateKind do
ConvertFrom-Json
(#20925) (Děkujeme@jborean93!) - Přidání directoryInfo do outputType pro new-item (#21126) (Díky@MartinGC94!)
- Oprava
Get-Error
serializace hodnot pole (#21085) (Díky@jborean93!) - Oprava
Test-ModuleManifest
, aby mohl používat cestu UNC (#24115) - Oprava
Get-TypeData
okamžitého zápisu do kanálu místo shromažďování dat (#24236) (díky@MartinGC94) - Přidání
-Force
parametru doResolve-Path
aConvert-Path
rutin pro podporu skrytých souborů se zástupnými znaky #20981 (Děkujeme @ArmaanMcleod!)
Vylepšení motoru
- Explicitně spusťte a zastavte barvu chyby ANSI (#24065) (Díky@JustinGrote!)
- Vylepšení definice přetížení .NET obecných metod (#21326) (Díky@jborean93!)
-
+=
Optimalizace operace pro kolekci, když se jedná o pole objektů (#23901) (děkujeme@jborean93!) - Přidání telemetrie pro kontrolu konkrétních značek při importu modulu (#20371)
- Přidání
PSAdapter
a přidání doConsoleGuiTools
seznamu povolených telemetrických dat modulu (#20641) - Přidání modulu WinGet ke sledování využití (#21040)
- Při protokolování událostí ETW WDAC (#20910) se ujistěte, že název souboru nemá hodnotu null (děkujeme)@jborean93!)
- Oprava čtyř regresí zavedených funkcí protokolování WDAC (#20913)
- Ponechte vstupní, výstupní a chybové popisovače bez nastavení, pokud nejsou přesměrovány (#20853)
- Oprava implicitních rutin proxy vzdálené komunikace pro zpracování běžných parametrů (#20367)
- Zahrnout verzi modulu do chybových zpráv, pokud modul nebyl nalezen (#20144) (Děkujeme@ArmaanMcleod!)
- Oprava
unixmode
zpracovánísetuid
asticky
v případech, kdy soubor není spustitelný soubor (#20366) - Oprava použití sestavení k použití Path.Combine při vytváření cest sestavení (#21169)
- Ověřte hodnotu použití oboru názvů během sémantických kontrol, abyste zabránili deklarování neplatných oborů názvů (#21162).
- Zpracování globálního nástroje speciálně při předřazení
$PSHome
na PATH (#24228)
Experimentální funkce
Následující experimentální funkce byly převedeny na hlavní funkce v PowerShellu 7.5-rc.1:
V PowerShellu 7.5-rc.1 jsou zahrnuty následující experimentální funkce:
- PSRedirectToVariable – Povolit přesměrování na proměnnou (#20381)
- PSNativeWindowsTildeExpansion – Přidání rozšíření tilda pro nativní spustitelné soubory windows (#20402) (Díky@domsleee!)
-
PSSerializeJSONLongEnumAsNumber -
ConvertTo-Json
nyní zachází s velkými výčty jako čísly (#20999) (Díky@jborean93!)
Vylepšení výkonu
PowerShell 7.5-rc.1 obsahoval PR#23901 z @jborean93, který zlepšuje výkon operace +=
pro pole objektů.
Následující příklad měří výkon pro různé metody přidání prvků do pole.
$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
}
Při spuštění skriptu v PowerShellu 7.4.6 uvidíte, že použití operátoru +=
je nejpomalejší metodou.
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
Při spuštění skriptu v PowerShellu 7.5-rc.1 uvidíte, že použití operátoru +=
je mnohem rychlejší než PowerShell 7.4.6. Teď je to také rychlejší než použití 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)