Nyheter i PowerShell 7.5
PowerShell 7.5.0 innehåller följande funktioner, uppdateringar och icke-bakåtkompatibla ändringar. PowerShell 7.5 bygger på .NET 9.0.1 GA-versionen.
En fullständig lista över ändringar finns i CHANGELOG på GitHub-lagringsplatsen. Mer information om .NET 9 finns i [Nyheter i .NET 9][07].
Icke-bakåtkompatibla ändringar
- Korrigering
-OlderThan
och-NewerThan
parametrar förTest-Path
när du använderPathType
och datumintervall (#20942) (Tack @ArmaanMcleod!)- Tidigare
-OlderThan
skulle ignoreras om det anges tillsammans
- Tidigare
- Ändra
New-FileCatalog -CatalogVersion
standardvärdet till 2 (#20428) (tack @ThomasNieto!) - Blockera att få hjälp från nätverksplatser i begränsade fjärrkommunikationssessioner (#20593)
- Windows-installationsprogrammet kommer nu ihåg de installationsalternativ som används och använder dem för att initiera alternativ för nästa installation (#20420) (Tack @reduckted!)
-
ConvertTo-Json
serialiserarBigInteger
nu som ett tal (#21000) (tack @jborean93!) - .NET 9 tog bort
BinaryFormatter
-implementeringen som orsakade en regression i cmdletenOut-GridView
. Sökfunktionen iOut-GridView
fungerar inte i PowerShell 7.5. Det här problemet spåras i Issue #24749.
Moduler har uppdaterats
PowerShell 7.5.0 innehåller följande uppdaterade moduler:
- Microsoft.PowerShell.PSResourceGet v1.1.0
- PSReadLine v2.3.6
Förbättringar av flikens slutförande
Stort tack till @ArmaanMcleod och andra för allt deras arbete för att förbättra fliken slutförande.
- Återgå till typinferens när hashtabellnyckelvärde inte kan hämtas från ett säkert uttryck (#21184) (Tack @MartinGC94!)
- Åtgärda regressionen när du gör typinferens för
$_
(#21223) (tack @MartinGC94!) - Expandera
~
till$home
i Windows med tabbavslut (#21529) - Slutför inte när du deklarerar parameternamn och klassmedlem (#21182) (Tack @MartinGC94!)
- Förhindra återställning till filkomplettering när fliken slutför typnamn (#20084) (tack @MartinGC94)
- Lägg till argument completer till
-Version
förSet-StrictMode
(#20554) (Tack @ArmaanMcleod!) - Lägg till
-Verb
argument completer förGet-Verb
/Get-Command
och refaktorGet-Verb
(#20286) (Tack@ArmaanMcleod) - Lägg till
-Verb
argument completer förStart-Process
(#20415) (Tack @ArmaanMcleod) - Lägg till
-Scope
argument completer för*-Variable
,*-Alias
&*-PSDrive
kommandon (#20451) (Tack @ArmaanMcleod) - Lägg till
-Module
slutförande förSave-Help
/Update-Help
kommandon (#20678) (tack@ArmaanMcleod)
Nya cmdletar
- Lägg till
ConvertTo-CliXml
ochConvertFrom-CliXml
cmdletar (#21063) (tack @ArmaanMcleod!)
Förbättringar av webb-cmdletar
- Korrigering för att tillåta att
-PassThru
och-Outfile
fungerar tillsammans (#24086) - Lägg till egenskapen
OutFile
iWebResponseObject
(#24047) - Visa filnamn i
Invoke-WebRequest -OutFile -Verbose
(#24041) - Åtgärda WebCmdlets när
-Body
har angetts menContentType
är inte (#23952) (Tack @CarloToso!) - Korrigering
Invoke-WebRequest
för att rapportera rätt storlek när-Resume
har angetts (#20207) (Tack @LNKLEO!) - Åtgärda webb-cmdletar så att appar kan
WinForm
fungera korrekt (#20606)
Andra cmdlet-förbättringar
- Aktivera
-NoRestart
för att arbeta medRegister-PSSessionConfiguration
(#23891) - Lägg till
IgnoreComments
och alternativ förAllowTrailingCommas
cmdlet (Test-Json
) (Tack@ArmaanMcleod!) - Get-Help kan rapportera parametrar med
ValueFromRemainingArguments
attribut som pipeline-able (#23871) - Ändra typ av
LineNumber
tillulong
iSelect-String
(#24075) (Tack @Snowman-25!) -
Get-Process
: Ta bort administratörskrav för-IncludeUserName
(#21302) (tack @jborean93!) - Korrigering
Test-Path -IsValid
för att söka efter ogiltiga sökvägar och filnamnstecken (#21358) - Lägg till
RecommendedAction
ConciseView
i felrapportering (#20826) (tack @JustinGrote!) - Förloppsindikatorn har lagts till för
Remove-Item
cmdlet (#20778) (tack @ArmaanMcleod!) - Korrigering
Test-Connection
på grund av .NET 8-ändringar (#20369) - Åtgärda
Get-Service
icke-avslutande felmeddelande för att inkludera kategori (#20276) - Lägg till
-Empty
och-InputObject
parametrar iNew-Guid
(#20014) (tack @CarloToso!) - Lägg till aliaset
r
i parametern-Recurse
Get-ChildItem
för kommandot (#20100) (Tack @kilasuit!) - Lägg till
LP
LiteralPath
i alias för funktioner som fortfarande saknar det (#20820) - Lägg till implicit lokaliseringsåterställning till
Import-LocalizedData
(#19896) (Tack @chrisdent-de!) - Lägg till
Aliases
i egenskaperna som visas när du formaterar hjälpinnehållet för parametern som returneras avGet-Help
(#20994) - Lägg till
HelpUri
iRemove-Service
(#20476) - Åtgärda slutförandekrasch för SCCM-providern (#20815, #20919, #20915) (Tack @MartinGC94!)
- Åtgärda regression i
Get-Content
när-Tail 0
och-Wait
används tillsammans (#20734) (tack @CarloToso!) - Korrigering
Start-Process -PassThru
för att kontrolleraExitCode
att egenskapen är tillgänglig för det returneradeProcess
objektet (#20749) (tack @CodeCyclone!) - Korrigering
Group-Object
för att använda aktuell kultur för dess utdata (#20608) - Åtgärda
Group-Object
utdata med hjälp av interpolerade strängar (#20745) (tack @mawosoft!) - Åtgärda rendering av
DisplayRoot
för nätverkPSDrive
(#20793) - Åtgärda
Copy-Item
förloppet för att endast visa slutförda när alla filer kopieras (#20517) - Åtgärda regression av UNC-sökvägens slutförande (#20419) (tack @MartinGC94!)
- Rapportfel om ogiltigt
-ExecutionPolicy
skickas tillpwsh
(#20460) - Lägg till WinGetCommandNotFound - och CompletionPredictor-moduler för att spåra användningen (#21040)
- Lägg till DateKind-parametern i
ConvertFrom-Json
(#20925) (tack @jborean93!) - Lägg till DirectoryInfo i OutputType för nytt objekt (#21126) (tack @MartinGC94!)
- Åtgärda
Get-Error
serialisering av matrisvärden (#21085) (tack @jborean93!) - Åtgärda
Test-ModuleManifest
så att den kan använda en UNC-sökväg (#24115) - Korrigering
Get-TypeData
för att skriva till pipelinen omedelbart i stället för att samla in data först (#24236) (Tack @MartinGC94) - Lägg till
-Force
parametern iResolve-Path
ochConvert-Path
cmdletar för att stödja dolda jokerteckenfiler #20981 (tack @ArmaanMcleod!)
Motorförbättringar
- Starta och stoppa ansi-felfärg (#24065) (tack @JustinGrote!)
- Förbättra .NET-överlagringsdefinitionen för generiska metoder (#21326) (tack @jborean93!)
- Optimera åtgärden
+=
för en samling när det är en objektmatris (#23901) (Tack @jborean93!) - Lägg till telemetri för att söka efter specifika taggar när du importerar en modul (#20371)
- Lägg till
PSAdapter
ochConsoleGuiTools
i modulens lista över tillåtna inläsningar (#20641) - Lägg till WinGet-modul för att spåra användning (#21040)
- Kontrollera att filnamnet inte är null när WDAC ETW-händelser loggas (#20910) (tack @jborean93!)
- Åtgärda fyra regressioner som introducerades av WDAC-loggningsfunktionen (#20913)
- Lämna indata, utdata och felhandtag oeterade när de inte omdirigeras (#20853)
- Åtgärda implicita cmdletar för fjärrkommunikationsproxy för att agera på vanliga parametrar (#20367)
- Inkludera modulversionen i felmeddelanden när modulen inte hittas (#20144) (tack @ArmaanMcleod!)
- Korrigering
unixmode
för att hanterasetuid
ochsticky
när filen inte är körbar (#20366) - Åtgärda användningen av sammansättningen för att använda Path.Combine när du skapar sammansättningssökvägar (#21169)
- Verifiera värdet för att använda namnområdet under semantiska kontroller för att förhindra att ogiltiga namnområden deklareras (#21162)
- Hantera globala verktyg särskilt när du väntar på
$PSHome
PATH (#24228)
Experimentella funktioner
Följande experimentella funktioner konverterades till vanliga funktioner i PowerShell 7.5-rc.1:
Följande experimentella funktioner ingår i PowerShell 7.5-rc.1:
- PSRedirectToVariable – Tillåt omdirigering till en variabel (#20381)
- PSNativeWindowsTildeExpansion – Lägg till tilde-expansion för inbyggda körbara windows-filer (#20402) (tack @domsleee!)
-
PSSerializeJSONLongEnumAsNumber -
ConvertTo-Json
behandlar nu stora uppräkningar som tal (#20999) (tack@jborean93!)
Prestandaförbättringar
PowerShell 7.5-rc.1 inkluderade PR#23901 från @jborean93 som förbättrar prestandan för den +=
åtgärden för en matris med objekt.
I följande exempel mäts prestanda för olika metoder för att lägga till element i en matris.
$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
}
När du kör skriptet i PowerShell 7.4.6 ser du att det är den långsammaste metoden att använda operatorn +=
.
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
När du kör skriptet i PowerShell 7.5-rc.1 ser du att det går mycket snabbare att använda +=
-operatorn än PowerShell 7.4.6. Nu är det också snabbare än att använda metoden 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)