Condividi tramite


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 usa Test-Path e l'intervallo di date (#20942PathTypegrazie)@ArmaanMcleod!)
    • In precedenza -OlderThan verrebbe ignorato se specificato insieme
  • 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-Jsonora serializza BigInteger 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 per Set-StrictMode (#20554) (grazie)@ArmaanMcleod!)
  • Aggiunta -Verb del compilatore di argomenti per Get-Verb/ Get-Commande refactoring Get-Verb (#20286) (grazie)@ArmaanMcleod)
  • Aggiunta -Verb del compilatore di argomenti per Start-Process (#20415) (grazie) @ArmaanMcleod)
  • Aggiungere -Scope il compilatore di argomenti per *-Variablei comandi , *-Alias & *-PSDrive (#20451) (grazie)@ArmaanMcleod)
  • Aggiunta -Module del completamento per Save-Help/Update-Helpi comandi (#20678) (grazie)@ArmaanMcleod)

Nuovi cmdlet

  • Aggiungere ConvertTo-CliXml cmdlet e ConvertFrom-CliXml (#21063) (grazie) @ArmaanMcleod!)

Miglioramenti ai cmdlet Web

  • Correzione per consentire l'interazione tra -PassThru e -Outfile (#24086)
  • Aggiungere la proprietà OutFile in WebResponseObject (#24047)
  • Mostra nome file in Invoke-WebRequest -OutFile -Verbose (#24041)
  • Correzione di WebCmdlets quando -Body viene specificato ma ContentType 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 con Register-PSSessionConfiguration (#23891)
  • Aggiungere IgnoreComments opzioni e AllowTrailingCommas al Test-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 in ulong in Select-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 alla ConciseView 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 a New-Guid (#20014) (grazie)@CarloToso!)
  • Aggiungere l'alias r al parametro -Recurse per il Get-ChildItem comando (#20100) (grazie)@kilasuit!)
  • Aggiunta LP agli LiteralPath 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 da Get-Help (#20994)
  • Aggiungi HelpUri a Remove-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 la ExitCode proprietà sia accessibile per l'oggetto restituito Process (#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 rete PSDrive (#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 a pwsh (#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 ai Resolve-Path cmdlet e Convert-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 e ConsoleGuiTools 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 gestire setuid e sticky 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:

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