Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
PowerShell 7.5.4 include le funzionalità, gli aggiornamenti e le modifiche di rilievo seguenti. PowerShell 7.5.4 è basato sulla versione .NET 9.0.306.
Per un elenco completo delle modifiche, vedere CHANGELOG nel repository GitHub. Per altre informazioni su .NET 9, vedere Novità di .NET 9.
Modifiche di rilievo
- Correzione dei parametri
-OlderThane-NewerThanperTest-Pathquando si utilizzaPathTypee l'intervallo di date (#20942) (grazie @ArmaanMcleod!))- In precedenza
-OlderThanverrebbe ignorato se specificato insieme
- In precedenza
- Impostare
New-FileCatalog -CatalogVersionil valore predefinito su 2 (#20428) (grazie) @ThomasNieto!) - Bloccare l'assistenza 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-Jsonora serializzaBigIntegercome numero (#21000) (grazie) @jborean93!)
Moduli aggiornati
PowerShell 7.5.4 include i moduli aggiornati seguenti:
- Microsoft.PowerShell.PSResourceGet v1.1.1
- PSReadLine v2.3.6
Miglioramenti del completamento della tabulazione
Molte grazie a @ArmaanMcleod e ad altri per il loro grande lavoro per migliorare il completamento delle schede.
- Utilizzare l'inferenza del tipo quando non è possibile recuperare la chiave e il 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$HOMEin Windows con il completamento della scheda (#21529) - Non completare la dichiarazione del nome del parametro e del membro della classe (#21182) (grazie) @MartinGC94!)
- Impedire il fallback al completamento del file quando si utilizzano i tab per completare i nomi dei tipi (#20084) (grazie)
- Aggiungere il compilatore di argomenti a
-VersionperSet-StrictMode(#20554) (grazie) @ArmaanMcleod!) - Aggiungi il completatore di argomenti per
-VerbGet-Verb/ e il refactoring diGet-Command(Get-Verb) (Grazie ) - Aggiungi il completatore di argomenti per
-Verb(Start-Process) Grazie a - Aggiungere il completatore di argomenti per i comandi
-Scope,*-Variable&*-Alias(*-PSDrive) (Grazie ) - Aggiunta
-Moduledel completamento perSave-Help/Update-Helpi comandi (#20678) (grazie @ArmaanMcleod))
I nuovi cmdlet
- Aggiungi i cmdlet
ConvertTo-CliXmleConvertFrom-CliXml(#21063) (grazie @ArmaanMcleod!))
Miglioramenti ai cmdlet Web
- Correzione per consentire
-PassThrue-Outfilecollaborare (#24086) - Aggiungere la proprietà
OutFileinWebResponseObject(#24047) - Mostra nome file in
Invoke-WebRequest -OutFile -Verbose(#24041) - Correzione di WebCmdlets quando
-Bodyviene specificato maContentTypenon (#23952) (grazie) @CarloToso!) - Correggi
Invoke-WebRequestper segnalare dimensioni corrette quando-Resumeè specificato (#20207) (grazie @LNKLEO!)) - Correzione dei cmdlet Web per consentire
WinFormil corretto funzionamento delle app (#20606)
Altri miglioramenti ai cmdlet
- Correzione
Out-GridViewsostituendo l'uso di obsoletoBinaryFormattercon l'implementazione personalizzata (#25559) - Abilitare
-NoRestarta funzionare conRegister-PSSessionConfiguration(#23891) - Aggiungere opzioni
IgnoreCommentseAllowTrailingCommasalTest-Jsoncmdlet (#23817) (grazie @ArmaanMcleod!)) - Get-Help può segnalare parametri con attributo
ValueFromRemainingArgumentscome pipeline-abile (#23871) - Modificare il tipo di
LineNumberinulonginSelect-String(#24075) (grazie) @Snowman-25!) -
Get-Process: Rimuovere il requisito di amministratore per-IncludeUserName(#21302) (grazie) @jborean93!) - Correzione
Test-Path -IsValidper verificare la presenza di caratteri di percorso e nome file non validi (#21358) - Aggiungere
RecommendedActionallaConciseViewsegnalazione errori (#20826) (grazie) @JustinGrote!) - Aggiunta barra di avanzamento per
Remove-Itemcmdlet (#20778) (grazie @ArmaanMcleod!)) - Correzione
Test-Connectiondovuta a modifiche di .NET 8 (#20369) - Correggi il messaggio di errore non terminante
Get-Serviceper includere la categoria (#20276) - Aggiungere i parametri
-Emptye-InputObjectaNew-Guid(#20014) (Grazie @CarloToso!)) - Aggiungere l'alias
ral parametro-Recurseper ilGet-ChildItemcomando (#20100) (grazie) @kilasuit!) - Aggiungere
LPagliLiteralPathalias per le funzioni che lo richiedono ancora (#20820) - Aggiungere il fallback di localizzazione implicita a
Import-LocalizedData(#19896) (grazie) @chrisdent-de!) - Aggiungi
Aliasesalle proprietà visualizzate durante la formattazione del contenuto della Guida relativa al parametro restituito daGet-Help(#20994) - Aggiungi
HelpUriaRemove-Service(#20476) - Correzione dell'arresto anomalo del completamento per il provider SCCM (#20815, #20919, #20915) (grazie) @MartinGC94!)
- Correzione della regressione in
Get-Contentquando-Tail 0e-Waitvengono usati insieme (#20734) (grazie) @CarloToso!) - Correzione
Start-Process -PassThruper assicurarsi che laExitCodeproprietà sia accessibile per l'oggetto restituitoProcess(#20749) (grazie) @CodeCyclone!) - Correggi
Group-Objectper utilizzare la cultura corrente nel suo output (#20608) - Correzione
Group-Objectdell'output usando stringhe interpolate (#20745) (grazie) @mawosoft!) - Correzione del rendering di
DisplayRootper la retePSDrive(#20793) - Correzione
Copy-Itemdello 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!)
- Segnala l'errore se un
-ExecutionPolicynon valido 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 all'OutputType per New-Item (#21126) (grazie @MartinGC94!))
- Correzione
Get-Errordella serializzazione dei valori di matrice (#21085) (grazie) @jborean93!) - Correzione
Test-ModuleManifestin modo che possa usare un percorso UNC (#24115) - Correggi
Get-TypeDataper scrivere nella pipeline subito invece di raccogliere prima i dati (#24236) (Grazie @MartinGC94)) - Aggiungere il parametro
-Forceai cmdletResolve-PatheConvert-Pathper supportare i file nascosti con caratteri jolly #20981 (grazie @ArmaanMcleod!)) - Impostare gli handle standard in modo esplicito all'avvio di un processo con
-NoNewWindow(#25324) - Rendere accessibili i membri di istanza protetti e interni ereditati nell'ambito della classe. (#25547) (Grazie) @mawosoft!)
- Rimuovere il suggerimento fuzzy precedente e correggere il suggerimento relativo al nome file dello script locale (#25330)
- Correggi metodo
PSMethodInvocationConstraints.GetHashCode(#25306) (Grazie @crazyjncsu!))
Miglioramenti del motore
- Spostare la registrazione delle invocazioni del metodo .NET dopo che è stata eseguita la conversione del tipo necessaria per gli argomenti del metodo (#25357)
- Fallback a AppLocker dopo
WldpCanExecuteFile(#25305) - Avviare e arrestare in modo esplicito il colore errore ANSI (#24065) (grazie) @JustinGrote!)
- Migliorare la definizione di overload dei metodi generici in .NET (#21326) grazie!
- 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
PSAdaptereConsoleGuiToolsall'elenco di elementi di telemetria del modulo di caricamento (#20641) - Aggiungere un 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 impostati 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
unixmodeper gestiresetuidestickyquando 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 dell'uso del namespace durante i controlli semantici per impedire la dichiarazione di namespace non validi (#21162)
- Gestire lo strumento globale in modo speciale quando si aggiunge
$PSHOMEall'inizio di 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 della tilde per i file eseguibili nativi di Windows (#20402) (grazie @domsleee!)
-
PSSerializeJSONLongEnumAsNumber -
ConvertTo-Jsonora considera le enumerazioni di grandi dimensioni come numeri (#20999) (grazie) @jborean93!)
Miglioramenti delle prestazioni
PowerShell 7.5-rc.1 include pr#23901 da @jborean93 che migliora le prestazioni dell'operazione += per una matrice 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