Novità di PowerShell 7.5
PowerShell 7.5-rc.1 include le funzionalità, gli aggiornamenti e le modifiche di rilievo seguenti. PowerShell 7.5 è basato sulla versione ga di .NET 9.0.100.
Per un elenco completo delle modifiche, vedere CHANGELOG nel repository GitHub.
Modifiche di rilievo
- Correzione
-OlderThan
e parametri per-NewerThan
quando si usaTest-Path
e l'intervallo di date (#20942PathType
grazie)@ArmaanMcleod!)- In precedenza
-OlderThan
verrebbe ignorato se specificato insieme
- In precedenza
- Impostare
New-FileCatalog -CatalogVersion
il valore predefinito su 2 (#20428) (grazie) @ThomasNieto!) - Bloccare il recupero della Guida dai percorsi di rete nelle sessioni remote con restrizioni (#20593)
- Windows Installer ora memorizza le opzioni di installazione usate e le usa per inizializzare le opzioni per l'installazione successiva (#20420) (grazie) @reduckted!)
-
ConvertTo-Json
ora serializzaBigInteger
come numero (#21000) (grazie)@jborean93!)
Moduli aggiornati
PowerShell 7.5-rc.1 include i moduli aggiornati seguenti:
- Microsoft.PowerShell.PSResourceGet v1.1.0-RC2
- PSReadLine v2.3.6
Miglioramenti del completamento tramite tabulazione
Molti grazie a @ArmaanMcleod e altri per tutto il loro lavoro per migliorare il completamento delle schede.
- Eseguire il fallback all'inferenza del tipo quando non è possibile recuperare chiave-valore della tabella hash da un'espressione sicura (#21184) (grazie)@MartinGC94!)
- Correzione della regressione durante l'inferenza del tipo per
$_
(#21223) (grazie) @MartinGC94!) - Espandi
~
fino a$home
in Windows con il completamento della scheda (#21529) - Non completare la dichiarazione del nome del parametro e del membro della classe (#21182) (grazie)@MartinGC94!)
- Impedisci il fallback al completamento del file quando la scheda completa i nomi dei tipi (#20084) (grazie)@MartinGC94)
- Aggiungere il compilatore di argomenti a
-Version
perSet-StrictMode
(#20554) (grazie)@ArmaanMcleod!) - Aggiunta
-Verb
del compilatore di argomenti perGet-Verb
/Get-Command
e refactoringGet-Verb
(#20286) (grazie)@ArmaanMcleod) - Aggiunta
-Verb
del compilatore di argomenti perStart-Process
(#20415) (grazie) @ArmaanMcleod) - Aggiungere
-Scope
il compilatore di argomenti per*-Variable
i comandi ,*-Alias
&*-PSDrive
(#20451) (grazie)@ArmaanMcleod) - Aggiunta
-Module
del completamento perSave-Help
/Update-Help
i comandi (#20678) (grazie)@ArmaanMcleod)
Nuovi cmdlet
- Aggiungere
ConvertTo-CliXml
cmdlet eConvertFrom-CliXml
(#21063) (grazie) @ArmaanMcleod!)
Miglioramenti ai cmdlet Web
- Correzione per consentire l'interazione tra
-PassThru
e-Outfile
(#24086) - Aggiungere la proprietà
OutFile
inWebResponseObject
(#24047) - Mostra nome file in
Invoke-WebRequest -OutFile -Verbose
(#24041) - Correzione di WebCmdlets quando
-Body
viene specificato maContentType
non (#23952) (grazie) @CarloToso!) - Correzione
Invoke-WebRequest
per segnalare le dimensioni corrette quando-Resume
viene specificato (#20207) (grazie)@LNKLEO!) - Correzione dei cmdlet Web per consentire
WinForm
il corretto funzionamento delle app (#20606)
Altri miglioramenti ai cmdlet
- Abilitare
-NoRestart
l'uso conRegister-PSSessionConfiguration
(#23891) - Aggiungere
IgnoreComments
opzioni eAllowTrailingCommas
alTest-Json
cmdlet (#23817) (grazie)@ArmaanMcleod!) - Get-Help può segnalare parametri con
ValueFromRemainingArguments
attributo in grado di eseguire la pipeline (#23871) - Modificare il tipo di
LineNumber
inulong
inSelect-String
(#24075) (grazie)@Snowman-25!) -
Get-Process
: Rimuovere il requisito di amministratore per-IncludeUserName
(#21302) (grazie) @jborean93!) - Correzione
Test-Path -IsValid
per verificare la presenza di caratteri di percorso e nome file non validi (#21358) - Aggiungere
RecommendedAction
allaConciseView
segnalazione errori (#20826) (grazie)@JustinGrote!) - Aggiunta della barra di stato per
Remove-Item
il cmdlet (#20778) (grazie) @ArmaanMcleod!) - Correzione
Test-Connection
dovuta a modifiche di .NET 8 (#20369) - Correzione del
Get-Service
messaggio di errore non irreversibile per includere la categoria (#20276) - Aggiungere
-Empty
parametri e-InputObject
aNew-Guid
(#20014) (grazie)@CarloToso!) - Aggiungere l'alias
r
al parametro-Recurse
per ilGet-ChildItem
comando (#20100) (grazie)@kilasuit!) - Aggiunta
LP
agliLiteralPath
alias per le funzioni ancora mancanti (#20820) - Aggiungere il fallback di localizzazione implicita a
Import-LocalizedData
(#19896) (grazie)@chrisdent-de!) - Aggiungere
Aliases
alle proprietà visualizzate durante la formattazione del contenuto della Guida del parametro restituito daGet-Help
(#20994) - Aggiungi
HelpUri
aRemove-Service
(#20476) - Correzione dell'arresto anomalo del completamento per il provider SCCM (#20815, #20919, #20915) (grazie) @MartinGC94!)
- Correzione della regressione in
Get-Content
quando-Tail 0
e-Wait
vengono usati insieme (#20734) (grazie)@CarloToso!) - Correzione
Start-Process -PassThru
per assicurarsi che laExitCode
proprietà sia accessibile per l'oggetto restituitoProcess
(#20749) (grazie) @CodeCyclone!) - Correzione
Group-Object
dell'uso delle impostazioni cultura correnti per il relativo output (#20608) - Correzione
Group-Object
dell'output usando stringhe interpolate (#20745) (grazie) @mawosoft!) - Correzione del rendering di
DisplayRoot
per la retePSDrive
(#20793) - Correzione
Copy-Item
dello stato di avanzamento per visualizzare il completamento solo quando tutti i file vengono copiati (#20517) - Correzione della regressione del completamento del percorso UNC (#20419) (grazie)@MartinGC94!)
- Segnalare l'errore se non è valido
-ExecutionPolicy
viene passato apwsh
(#20460) - Aggiungere moduli WinGetCommandNotFound e CompletionPredictor per tenere traccia dell'utilizzo (#21040)
- Aggiungere il parametro DateKind a
ConvertFrom-Json
(#20925) (grazie)@jborean93!) - Aggiungere DirectoryInfo a OutputType per New-Item (#21126) (grazie) @MartinGC94!)
- Correzione
Get-Error
della serializzazione dei valori di matrice (#21085) (grazie)@jborean93!) - Correzione
Test-ModuleManifest
in modo che possa usare un percorso UNC (#24115) - Correzione
Get-TypeData
della scrittura nella pipeline immediatamente invece di raccogliere i dati (#24236) (grazie)@MartinGC94) - Aggiungere
-Force
il parametro aiResolve-Path
cmdlet eConvert-Path
per supportare i file nascosti con caratteri jolly #20981 (grazie @ArmaanMcleod!)
Miglioramenti del motore
- Avviare e arrestare in modo esplicito il colore errore ANSI (#24065) (grazie)@JustinGrote!)
- Migliorare la definizione di overload .NET dei metodi generici (#21326) (grazie)@jborean93!)
- Ottimizzare l'operazione
+=
per una raccolta quando si tratta di una matrice di oggetti (#23901) (grazie) @jborean93!) - Aggiungere i dati di telemetria per verificare la presenza di tag specifici durante l'importazione di un modulo (#20371)
- Aggiungere
PSAdapter
eConsoleGuiTools
al modulo caricare l'elenco di elementi consentiti di telemetria (#20641) - Aggiungere il modulo Winget per tenere traccia dell'utilizzo (#21040)
- Assicurarsi che il nome file non sia Null durante la registrazione degli eventi ETW WDAC (#20910) (grazie)@jborean93!)
- Correzione di quattro regressioni introdotte dalla funzionalità di registrazione WDAC (#20913)
- Lasciare l'input, l'output e gli handle di errore non set quando non vengono reindirizzati (#20853)
- Correzione dei cmdlet proxy di comunicazione remota implicita per agire sui parametri comuni (#20367)
- Includere la versione del modulo nei messaggi di errore quando il modulo non viene trovato (#20144) (grazie) @ArmaanMcleod!)
- Correzione
unixmode
per gestiresetuid
esticky
quando il file non è un eseguibile (#20366) - Correzione dell'uso dell'assembly per l'uso di Path.Combine durante la creazione di percorsi di assembly (#21169)
- Convalidare il valore per l'uso dello spazio dei nomi durante i controlli semantici per impedire la dichiarazione di spazi dei nomi non validi (#21162)
- Gestire lo strumento globale in modo speciale quando è in sospeso
$PSHome
in PATH (#24228)
Funzionalità sperimentali
Le funzionalità sperimentali seguenti sono state convertite in funzionalità mainstream in PowerShell 7.5-rc.1:
Le funzionalità sperimentali seguenti sono incluse in PowerShell 7.5-rc.1:
- PSRedirectToVariable - Consenti il reindirizzamento a una variabile (#20381)
- PSNativeWindowsTildeExpansion - Aggiungere l'espansione tilde per i file eseguibili nativi di Windows (#20402) (grazie)@domsleee!)
-
PSSerializeJSONLongEnumAsNumber -
ConvertTo-Json
ora considera le enumerazioni di grandi dimensioni come numeri (#20999) (grazie)@jborean93!)
Miglioramenti delle prestazioni
PowerShell 7.5-rc.1 ha incluso PR#23901 da @jborean93 che migliora le prestazioni dell'operazione di +=
per un array di oggetti.
Nell'esempio seguente vengono misurate le prestazioni per metodi diversi di aggiunta di elementi a una matrice.
$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
}
Quando si esegue lo script in PowerShell 7.4.6, si noterà che l'uso dell'operatore +=
è il metodo più lento.
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
Quando si esegue lo script in PowerShell 7.5-rc.1, si noterà che l'uso dell'operatore +=
è molto più veloce di PowerShell 7.4.6. Ora, è anche più veloce rispetto all'uso del metodo 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