Novità di PowerShell 7.4

PowerShell 7.4 include le funzionalità, gli aggiornamenti e le modifiche di rilievo seguenti. PowerShell 7.4 è basato su .NET 8.0.0.

Per un elenco completo delle modifiche, vedere CHANGELOG nel repository GitHub.

Modifiche di rilievo

  • Le immagini Docker di Nano Server non sono disponibili per questa versione
  • Aggiunta del parametro ProgressAction ai parametri comuni
  • Aggiornare alcune API di PowerShell per generare ArgumentException anziché ArgumentNullException quando l'argomento è una stringa vuota (#19215) (grazie)@xtqqczze!)
  • Rimuovere il codice correlato a #requires -pssnapin (#19320)
  • Test-Json ora usa JsonSchema.Net anziché Newtonsoft.Json.Schema. Con questa modifica, Test-Json non supporta più gli schemi della bozza 4 meno recenti. (#18141) (Grazie @gregsdennis!) per altre informazioni sugli schemi JSON, vedere la documentazione dello schema JSON.
  • L'output di Test-Connection ora include informazioni più dettagliate sui test di connessione TCP
  • .NET ha introdotto le modifiche che hanno interessato Test-Connection. Il cmdlet restituisce ora un errore sulla necessità di usare nelle piattaforme Linux quando si usano sudo dimensioni del buffer personalizzate (#20369)
  • La funzionalità sperimentale PSNativeCommandPreserveBytePipe è ora mainstream. PowerShell mantiene ora i dati del flusso di byte quando si reindirizza il flusso stdout di un comando nativo a un file o quando si esegue il piping dei dati del flusso di byte nel flusso stdin di un comando nativo.
  • Modificare la modalità di gestione dei percorsi relativi in Resolve-Path quando si usa il parametro RelativeBasePath (#19755) (grazie) @MartinGC94!)
  • Rimuovere il codice PSv2 inutilizzato: rimuove la funzione TabExpansion (#18337)

Aggiornamenti del programma di installazione

Il pacchetto MSI di Windows offre ora un'opzione per disabilitare i dati di telemetria di PowerShell durante l'installazione. Per altre informazioni, vedere Installare il pacchetto MSI dalla riga di comando.

Versioni aggiornate di PSResourceGet e PSReadLine

PowerShell 7.4 include Microsoft.PowerShell.PSResourceGet v1.0.1. Questo modulo è installato side-by-side con PowerShellGet v2.2.5 e PackageManagement v1.4.8.1. Per altre informazioni, vedere la documentazione per Microsoft.PowerShell.PSResourceGet.

PowerShell 7.4 include ora PSReadLine v2.3.4. Per altre informazioni, vedere la documentazione per PSReadLine.

Miglioramenti del completamento tramite tabulazione

Molti grazie a @MartinGC94 e altri per tutto il loro lavoro per migliorare il completamento delle schede.

  • Correzione del problema durante il completamento del primo comando in uno script con un'espressione di matrice vuota (#18355)
  • Correzione del completamento dell'argomento posizionale (#17796)
  • Classificare in ordine di priorità il set di parametri predefinito quando si completano gli argomenti posizionali (#18755)
  • Migliorare la pseudo binding per i parametri dinamici (#18030)
  • Migliorare l'inferenza dei tipi di chiavi hashtable (#17907)
  • Correzione dell'errore di inferenza del tipo per istruzioni restituite vuote (#18351)
  • Migliorare l'inferenza dei tipi per Get-Random (#18972)
  • Correzione dell'inferenza del tipo per tutte le variabili di ambito (#18758)
  • Migliorare l'enumerazione dei tipi dedotti nella pipeline (#17799)
  • Aggiungere il completamento per i valori nei confronti durante il confronto delle enumerazioni (#17654)
  • Aggiungere il completamento dell'assegnazione di proprietà per le enumerazioni (#19178)
  • Correzione del completamento per le proprietà delle variabili PSCustomObject (#18682)
  • Correzione del completamento dei membri nell'argomento attributo (#17902)
  • Escludere gli alias dei parametri ridondanti dai risultati di completamento (#19382)
  • Correzione del completamento dei membri della classe per le classi con tipi di base (#19179)
  • Aggiungere il completamento per l'uso delle parole chiave (#16514)
  • Correzione della perdita di variabili TabExpansion2 durante il completamento delle variabili (#18763)
  • Abilitare il completamento delle variabili tra gli ambiti scriptBlock (#19819)
  • Correzione del completamento della variabile di istruzione foreach (#19814)
  • Correzione della precedenza dell'inferenza del tipo di variabile (#18691)
  • Correzione del completamento dei membri per la classe Enum di PowerShell (#19740)
  • Correzione dell'analisi dei valori letterali di matrice nelle espressioni di indice nelle chiamate al metodo (#19224)
  • Migliorare il completamento del percorso (#19489)
  • Correzione di un errore di indicizzazione fuori limite in CompleteInput per l'input di script vuoto (#19501)
  • Migliorare le prestazioni di completamento delle variabili (#19595)
  • Migliorare il completamento della chiave hashtable per le assegnazioni di variabili vincolate di tipo, tabelle Hash annidate e altro ancora (#17660)
  • Dedurre l'output dell'applicazione esterna come stringhe (#19193)
  • Aggiornare il completamento dei parametri per le enumerazioni per escludere i valori non consentiti dagli ValidateRange attributi (#17750) (grazie @fflaten!).
  • Correzione del completamento dei parametri dinamici (#19510)
  • Aggiungere il completamento per le variabili assegnate dall'istruzione Data (#19831)

Miglioramenti dei cmdlet Web

Molti grazie a @CarloToso e altri per tutto il lavoro sul miglioramento dei cmdlet Web.

  • Correzione della decompressione nei cmdlet Web per includere Brotli (#17955) (grazie)@iSazonov!)
  • I webcmdlet aggiungono 308 ai codici di reindirizzamento e alla pulizia minima (#18536)
  • Completare il rendering della barra di stato in Invoke-WebRequest al termine o all'annullamento del download (#18130)
  • I cmdlet Web ottengono l'intervallo Retry-After dalle intestazioni di risposta se il codice di stato è 429 (#18717)
  • I cmdlet Web impostano la codifica predefinita dei set di caratteri su UTF8 (#18219)
  • Mantenere WebSession.MaximumRedirection dalle modifiche (#19190)
  • WebCmdlets analizza la dichiarazione XML per ottenere il valore di codifica, se presente. (#18748)
  • Correzione dell'uso di xml -Body in webcmdlets senza codifica (#19281)
  • Modificare il comportamento del metodo PUT su POST 1 per il tipo di contenuto predefinito in WebCmdlets (#19152)
  • Prendere in considerazione ContentType from Headers in WebCmdlets (#19227)
  • Consenti di mantenere il metodo HTTP originale aggiungendo -PreserveHttpMethodOnRedirect ai cmdlet Web (#18894)
  • I webcmdlet visualizzano un errore in https al reindirizzamento http (#18595)
  • Aggiungere l'opzione AllowInsecureRedirect ai cmdlet Web (#18546)
  • Migliorare il messaggio dettagliato nei cmdlet Web quando la lunghezza del contenuto è sconosciuta (#19252)
  • Compilare l'URI relativo per i collegamenti dalla risposta in Invoke-WebRequest (#19092)
  • Correzione del reindirizzamento per -CustomMethod POST in WebCmdlets (#19111)
  • Eliminare la risposta precedente in Webcmdlets (#19117)
  • Migliorare il Invoke-WebRequest formato degli errori xml e json (#18837)
  • Aggiungere ValidateNotNullOrEmpty ai parametri OutFile e InFile di WebCmdlets (#19044)
  • HttpKnownHeaderNames update headers list (#18947)
  • Invoke-RestMethod -FollowRelLink correzione dei collegamenti contenenti virgole (#18829)
  • Correzione di bug con la gestione del reindirizzamento e dell'autenticazione KeepAuthorization nei cmdlet Web (#18902)
  • Aggiungere StatusCode a HttpResponseException (#18842)
  • Supporto delle connessioni permanenti HTTP nei cmdlet Web (#19249) (grazie)@stevenebutler!)
  • Invoke-RestMethod Pulizia piccola (#19490)
  • Migliorare il messaggio dettagliato di WebCmdlets per visualizzare la versione HTTP corretta (#19616)
  • Aggiungere FileNameStar a MultipartFileContent in WebCmdlets (#19467)
  • Correzione dello stato HTTP da 409 a 429 per WebCmdlets per ottenere l'intervallo tra tentativi dall'intestazione Retry-After. (#19622) (grazie) @mkht!)
  • Passare -TimeoutSec a -ConnectionTimeoutSeconds e aggiungere -OperationTimeoutSeconds ai cmdlet Web (#19558) (grazie @stevenebutler!) altri cmdlet)
  • Supportare CTRL+c quando la connessione si blocca durante la lettura dei dati in WebCmdlets (#19330) (grazie) @stevenebutler!)
  • Supporto del socket di dominio Unix in WebCmdlets (#19343)

Altri miglioramenti ai cmdlet

  • Test-Connection restituisce ora l'errore relativo alla necessità di usare sudo nelle piattaforme Linux quando si usano dimensioni del buffer personalizzate (#20369)
  • Aggiungere tipi di output ai comandi Format (#18746) (grazie)@MartinGC94!)
  • Aggiungere attributi del tipo di output per Get-WinEvent (#17948) (grazie) @MartinGC94!)
  • Aggiungere parametri Path e LiteralPath al Test-Json cmdlet (#19042) (grazie) @ArmaanMcleod!)
  • Aggiungere il parametro NoHeader ai ConvertTo-Csv cmdlet e Export-Csv (#19108) (grazie)@ArmaanMcleod!)
  • Aggiungere i parametri Confirm e WhatIf a Stop-Transcript(#18731) (grazie) @JohnLBevan!)
  • Aggiungere il parametro FuzzyMinimumDistance a Get-Command (#18261)
  • Rendere il parametro Encoding in grado di accettare ANSI la codifica in PowerShell (#19298) (grazie)@CarloToso!)
  • Aggiungere lo stato di avanzamento a Copy-Item (#18735)
  • Update-Help ora segnala un errore quando si usano impostazioni cultura implicite nei sistemi non statunitensi. (#17780) (grazie) @dkaszews!)
  • Non richiedere attività durante la creazione di un record di stato completato (#18474) (grazie)@MartinGC94!)
  • Non consentire valori negativi per Get-Content i parametri del -Head cmdlet e -Tail (#19715) (grazie) @CarloToso!)
  • Generare Update-Help un errore corretto quando le impostazioni cultura correnti non sono associate a una lingua (#19765) (grazie)@josea!)
  • Consentire la combinazione di -Skip parametri e -SkipLast nel Select-Object cmdlet . (#18849) (grazie) @ArmaanMcleod!)
  • Aggiungere Get-SecureRandom il cmdlet (#19587)
  • Set-Clipboard -AsOSC52 per l'utilizzo remoto (#18222) (grazie) @dkaszews!)
  • Velocizzare la Resolve-Path risoluzione del percorso relativo (#19171) (grazie) @MartinGC94!)
  • Aggiunta del parametro -CaseInsensitive switch ai Select-Object cmdlet e Get-Unique (#19683) (grazie)@ArmaanMcleod!)
  • Restart-Computer e Stop-Computer dovrebbe non riuscire con errore quando non è in esecuzione tramite sudo su Unix (#19824)

Miglioramenti del motore

Aggiornamenti a$PSStyle

  • Aggiunge proprietà Dim e DimOff (#18653)
  • Aggiunta di metodi statici alla classe PSStyle che esegue il mapping dei valori ConsoleColor in primo piano e di sfondo alle sequenze di escape ANSI (#17938)
  • Le intestazioni di tabella per i campi calcolati vengono formattate in corsivo per impostazione predefinita
  • Aggiunta del supporto per il rispetto $PSStyle.OutputRendering nell'host remoto (#19601)
  • Dati di telemetria aggiornati per includere l'uso dei CrescendoBuilt moduli (#20371)

Altri aggiornamenti del motore

  • Rendere la classe PowerShell non affiliata a Runspace quando si dichiara l'attributo NoRunspaceAffinity (#18138)
  • Aggiungere l'attributo ValidateNotNullOrWhiteSpace (#17191) (grazie) @wmentha!)
  • Aggiungere sqlcmd all'elenco per il passaggio di argomenti legacy (#18559)
  • Aggiungere la funzione cd~ (#18308) (grazie) @GigaScratch!)
  • Correzione dell'analisi dei tipi di matrice nei tipi generici (#19205) (grazie)@MartinGC94!)
  • Correzione del globbing con caratteri jolly nella radice dei percorsi dei dispositivi (#19442) (grazie)@MartinGC94!)
  • Aggiungere un'API pubblica per ottenere posizioni degli elementi PSModulePath (#19422)
  • Correzione di una stringa errata per la conversione del tipo (#19560) (grazie) @MartinGC94!)
  • Correzione dell'esecuzione lenta quando vengono usati molti punti di interruzione (#14953) (grazie) @nohwnd!)
  • Rimuovere il codice correlato a #requires -pssnapin (#19320)

Funzionalità sperimentali

PowerShell 7.4 introduce le funzionalità sperimentali seguenti:

  • PSFeedbackProvider : sostituisce il framework dei suggerimenti hardcoded con un provider di feedback estendibile.
    • Questa funzionalità aggiunge anche le proprietà FeedbackName, FeedbackText e FeedbackAction a $PSStyle.Formatting che consentono di modificare la formattazione dei messaggi di feedback.
  • PSModuleAutoLoadSkipOfflineFiles : l'individuazione dei moduli ignora ora i file contrassegnati dai provider di servizi cloud come non completamente su disco.
  • PSCommandWithArgs - Aggiunta del supporto per il passaggio di argomenti ai comandi come singola stringa

Le seguenti funzionalità sperimentali sono diventate mainstream:

PowerShell 7.4 ha modificato le funzionalità sperimentali seguenti:

Per altre informazioni sulle funzionalità sperimentali, vedere Uso delle funzionalità sperimentali.