Vai al contenuto principale

#27292

PowerShell 7.7 Preview 5: addio a MSI, GUID time-sortable e le altre novità per i sistemisti

PowerShell 7.7 cambia pelle: cosa aspettarsi dalla Preview 5Il 23 settembre 2026 il team di ha rilasciato PowerShell 7.7.0-preview.5, il q

Altro...

PowerShell 7.7 cambia pelle: cosa aspettarsi dalla Preview 5Il 23 settembre 2026 il team di ha rilasciato PowerShell 7.7.0-preview.5, il quinto assaggio di una versione che si preannuncia tra le più “disruptive” degli ultimi anni per chi gestisce infrastrutture . Non si tratta solo di nuovi cmdlet: cambia il meccanismo di distribuzione stesso di PowerShell su Windows, e cambia anche un comportamento di default che moltissimi script e applicazioni usano senza nemmeno pensarci, New-Guid. Il tutto gira ora su runtime .NET 11.0.0-rc.1, segno che l’intero stack si sta muovendo in sincrono verso il prossimo .NET 11.

Per chi amministra server, scrive moduli di automazione o integra PowerShell nelle pipeline CI/CD, questa preview merita un giro di test prima che le novità arrivino in produzione con la GA. Vediamo nel dettaglio cosa cambia e perché conviene prendersene cura adesso.

Addio al pacchetto MSI: si passa a MSIXLa notizia con il maggiore impatto operativo è la deprecazione del pacchetto MSI per l’installazione di PowerShell su Windows. A partire da PowerShell 7.7-preview.1 (aprile 2026), l’installer primario è diventato MSIX, e per le versioni 7.7 successive alla GA non è previsto più nessun pacchetto MSI.

Le motivazioni indicate dal team sono tre:

Affidabilità: MSIX un modello dichiarativo, più predicibile rispetto a MSI che si basa su custom action e script che possono fallire in modi poco diagnosticabili.

Servicing: MSIX supporta aggiornamenti differenziali nativi; MSI richiede invece tooling esterno e spesso una reinstallazione completa per gli aggiornamenti.

Accessibilità: MSI non soddisfa più i requisiti di accessibilità moderni, in particolare per gli utenti di screen reader.

Attenzione però: MSIX oggi non copre ancora tutti gli scenari che MSI gestiva, in particolare il remoting di PowerShell e l’esecuzione tramite servizi di sistema come il Task Scheduler. Se nella vostra organizzazione avete pipeline di deployment, immagini golden o task pianificati che installano PowerShell via MSI (ad esempio con msiexec /i PowerShell-7.x.x-win-x64.msi /quiet dentro uno script di provisioning), è il momento di:

Restare su PowerShell 7.6 ( LTS) per gli ambienti dove MSI è un requisito, dato che il supporto MSI continua per tutto il ciclo di vita supportato della 7.6.

Testare in laboratorio il nuovo pacchetto MSIX per verificare se remoting e task pianificati funzionano nel vostro scenario specifico, prima di pianificare la migrazione.

Tenere d’occhio la discussione ufficiale sulla repo di PowerShell (issue ) dove il team raccoglie i gap noti di MSIX e gli aggiornamenti del tooling di deployment.

New-Guid genera ora UUID versione 7 (time-sortable)Questo è probabilmente il cambiamento con le implicazioni più sottili per chi scrive codice. A partire dalla 7.7, New-Guid genera di default GUID versione 7 (RFC 9562) invece dei classici GUID versione 4 completamente casuali. Il formato di output resta identico (una stringa nel solito formato 8-4-4-4-12), ma la struttura interna no.

Un UUID v7 codifica nei primi 48 bit un timestamp Unix in millisecondi, seguito da bit di versione/variante e infine da una componente casuale. Il risultato pratico è che GUID generati in sequenza risultano ordinabili cronologicamente anche confrontandoli come semplici stringhe (o byte array), a differenza dei GUID v4 il cui ordinamento è del tutto imprevedibile.

PowerShell 7.7 preview: GUID generati a pochi istanti di distanza

PS> 1..3 | ForEach-Object { New-Guid }

0198f2a1-3c40-7e21-9a4d-1a2b3c4d5e6f
0198f2a1-3c42-7f03-8b1e-2c3d4e5f6071
0198f2a1-3c45-70ab-9c22-3d4e5f607182

I primi blocchi crescono in modo monotono: sono ordinabili per tempo di creazionePerché è rilevante per chi lavora con basi di dati? I GUID v4, usati come chiave primaria o chiave di clustering in Server, o altri RDBMS, sono una causa nota di fragmentazione degli indici: ogni inserimento finisce in una posizione casuale all’interno del B-tree, costringendo il motore a riorganizzare continuamente le pagine. Un identificativo time-ordered come l’UUID v7 si comporta in modo molto più simile a una chiave sequenziale (come un IDENTITY o una SEQUENCE), riducendo la fragmentazione e migliorando la località dei dati, pur mantenendo i vantaggi di un identificativo generabile offline e senza round-trip al database.

Se invece avete bisogno di un GUID completamente casuale e non predicibile (ad esempio per token o identificativi dove la non-inferibilità del tempo di creazione è un requisito di sicurezza), dovete ora passare esplicitamente al metodo .NET sottostante:

Forza un GUID v4 (casuale) come prima della 7.7

PS> [guid]::NewGuid()Vale la pena controllare se nei vostri script, moduli o pipeline qualcuno fa assunzioni implicite sulla “casualità” dei valori restituiti da New-Guid (ad esempio test che verificano la non-sequenzialità, o logiche di sharding basate sull’entropia del GUID): con la 7.7 quelle assunzioni non sono più valide.

Le altre novità degne di notaOltre ai due cambiamenti principali, la changelog della preview 5 porta diversi miglioramenti utili nella pratica quotidiana:

Formattazione AutoSize di default: è stata introdotta la possibilità di forzare la formattazione implicita delle tabelle su AutoSize, utile quando l’output di PowerShell viene elaborato da agenti AI o mostrato in terminali con larghezza ridotta, dove il wrapping automatico generava output difficile da interpretare.

New-TemporaryDirectory: un nuovo cmdlet che crea una directory temporanea univoca e ne restituisce il percorso, utile in script di build e di test che oggi si arrangiano con combinazioni manuali di Join-Path e [System.IO.Path]::GetTempPath().

Join-Path -Extension: il cmdlet accetta ora un parametro per aggiungere direttamente un’estensione al percorso risultante, evitando concatenazioni di stringhe manuali.

Maggiore resilienza di powershell.config.json: il file di configurazione per-utente ora tollera errori di I/O o JSON malformato senza impedire l’avvio di PowerShell. Una buona notizia per chi ha profili sincronizzati via OneDrive, dove un file corrotto a metà sincronizzazione poteva in passato bloccare l’avvio della shell. Il file di configurazione a livello di sistema continua invece a fallire in modo “chiuso” (blocking) per scelta di sicurezza.

Microsoft.PowerShell.PSResourceGet 1.3.0-preview2 e PSReadLine 2.4.5 aggiornati insieme alla shell.

Altri breaking change minori: la validazione “not null or empty” ora lancia System.ArgumentException invece di PSArgumentNullException; è stata corretta la gestione di -Switch:$false esplicito su diversi cmdlet (Where-Object, Export-Csv, Get-Random, Test-Connection e altri).

Come prepararsi prima della GAPowerShell 7.7 è ancora in preview, quindi c’è tempo per testare senza fretta, ma due aree meritano attenzione concreta già adesso:

Verificate i vostri processi di deployment automatizzato (immagini golden, Configuration Manager, Intune, pipeline DevOps) per capire quanto dipendono dal pacchetto MSI e pianificate un percorso di test verso MSIX, con particolare attenzione a remoting e Task Scheduler.

Cercate nel codice (vostro e delle librerie di terze parti che usate) ogni uso di New-Guid che faccia assunzioni implicite sulla casualità o sul non-ordinamento dei GUID generati, e valutate se serve passare esplicitamente a [guid]::NewGuid().

Come sempre con le preview, installatela in un ambiente isolato (ad esempio tramite lo ZIP portabile, side-by-side con la vostra versione stabile) prima di avvicinarla a qualsiasi sistema di produzione.

Fonte: What’s new in PowerShell 7.7 — Microsoft Learn e PowerShell MSI package deprecation — PowerShell Team Blog.

Terminale PowerShell 7.7 Preview 5 con esempio di New-Guid che genera UUID v7 time-sortable

#powershell #windows #guide #howto #tutorial #net #27292

0

Caricamento...

0
1

Caricamento...