Condividi tramite


Novità di PowerShell 7.1

L'11 novembre 2020 abbiamo annunciato la disponibilità generale di PowerShell 7.1. Basandoci sulle basi stabilite in PowerShell 7.0, i nostri sforzi si sono concentrati sulle problematiche della comunità e includono numerosi miglioramenti e correzioni. Siamo impegnati a garantire che PowerShell rimanga una piattaforma stabile e performante.

PowerShell 7.1 include le seguenti funzionalità, aggiornamenti e cambiamenti di emergenza.

  • PSReadLine 2.1.0, che include Predictive IntelliSense
  • PowerShell 7.1 è stato pubblicato sul Microsoft Store
  • Pacchetti di installazione aggiornati per le nuove versioni del sistema operativo con supporto per ARM64
  • 4 nuove funzionalità sperimentali e 2 funzionalità sperimentali promosse al mainstream
  • Diverse modifiche innovative per migliorare l'usabilità

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

PSReadLine 2.1.0

PowerShell 7.1 include anche PSReadLine 2.1.0. Questa versione include Predictive IntelliSense. Per maggiori informazioni sulla funzione Predictive IntelliSense, consulta l'annuncio nel blog PowerShell.

Pacchetto di installazione del Microsoft Store

PowerShell 7.1 è stato pubblicato sul Microsoft Store. Puoi trovare la versione PowerShell sul sito web del Microsoft Store o nell'applicazione Store su Windows.

Vantaggi del pacchetto di Microsoft Store:

  • Aggiornamenti automatici integrati in Windows
  • Si integra con altri meccanismi di distribuzione software come Intune e SCCM

Annotazioni

Qualsiasi impostazione di configurazione a livello di sistema memorizzata $PSHOME non può essere modificata. Ciò include la configurazione WSMAN. In questo modo si impedisce alle sessioni remote di connettersi alle installazioni di PowerShell basate su Store. Sono supportate le configurazioni a livello di utente e la comunicazione remota SSH.

Altri installatori

Per ulteriori informazioni up-todata sui sistemi operativi supportati e sul ciclo di vita del supporto, vedi il Lifecycle di Supporto PowerShell.

Controlla le istruzioni di installazione del tuo sistema operativo preferito:

Inoltre, PowerShell 7.1 supporta versioni ARM32 e ARM64 di Debian, Ubuntu e ARM64 Alpine Linux.

Sebbene non sia ufficialmente supportato, la community ha fornito anche pacchetti per Arch e Kali Linux.

Annotazioni

Debian 10+, CentOS 8+, Ubuntu 20.04, Alpine e Arm attualmente non supportano il remoting di WinRM. Per dettagli sulla configurazione del remoting basato su SSH, vedi PowerShell Remoting over SSH.

Funzionalità sperimentali

Per altre informazioni sulle funzionalità sperimentali, vedere Using Experimental Features.

Le seguenti funzionalità sperimentali sono ora caratteristiche mainstream in questa versione:

Le seguenti funzionalità sperimentali sono state aggiunte in questa versione:

  • Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace

    • PowerShell 7.1 estende questa funzionalità sperimentale per aggiungere il parametro Runspace a tutti *-PSBreakpoint i cmdlet. Il parametro Runspace specifica un oggetto Runspace che interagisce con i punti di interruzione nello spazio specificato.
  • PSNativePSPathResolution - Questa funzione ti permette di passare i percorsi provider PowerShell a comandi nativi che non supportano la sintassi dei percorsi PowerShell.

  • PSCultureInvariantReplaceOperator - Quando l'operando sinistro in un'istruzione -replace operatore non è una stringa, quell'operando viene convertito in una stringa. Con la funzione attivata, la conversione non utilizza le impostazioni di Cultura per la conversione delle stringhe.

  • PSSubsystemPluginModel getta le basi per supportare i futuri plug-in Predittivi di IntelliSense.

Cambiamenti e miglioramenti improvvisi

  • Il comportamento di confronto delle stringhe è cambiato in .NET 5.0

    PowerShell 7.1 è costruito su .NET 5.0, che ha introdotto la seguente modifica interruttiva:

    A partire da .NET 5.0, i confronti delle stringhe invarianti di cultura ignorano i caratteri di controllo non stampanti.

    Ad esempio, le seguenti due stringhe sono considerate identiche:

    # Escape sequence "`a" is Ctrl-G or [char]7
    'Food' -eq "Foo`ad"
    
    True
    
  • Correzione $? per non essere $false quando il comando nativo scrive in stderr (#13395)

    È comune che i comandi nativi scrivano su stderr senza voler indicare un guasto. Con questo cambiamento $? viene impostato solo $false quando il comando nativo ha anche un codice di uscita diverso da zero. Questo cambiamento non è correlato alla caratteristica PSNotApplyErrorActionToStderrsperimentale .

  • Non influenzare $ErrorActionPreferencestderr l'output dei comandi nativi (#13361)

    È comune che i comandi nativi scrivano su stderr senza voler indicare un guasto. Con questa modifica, stderr l'output viene ancora catturato negli oggetti ErrorRecord , ma l'esecuzione non si applica $ErrorActionPreference più se l'ErrorRecord proviene da un comando nativo.

  • Rinomina -FromUnixTime in -UnixTimeSeconds ON Get-Date per permettere l'input in tempo Unix (#13084) (Grazie @aetos382!)

    Il -FromUnixTime parametro è stato aggiunto durante la versione 7.1-preview.2. Il parametro è stato rinominato per adattarsi meglio al tipo di dato. Questo parametro assume un valore intero che rappresenta in secondi dal 1° gennaio 1970, 0:00:00.

    Questo esempio converte un'ora Unix (rappresentata dal numero di secondi dal 01-01-1970 0:00:00) in DateTime.

    Get-Date -UnixTimeSeconds 1577836800
    
    Wednesday, January 01, 2020 12:00:00 AM
    
  • Consentire di specificare esplicitamente il parametro denominato di sostituire lo stesso parametro dallo splatting hashtable (#13162)

    Con questo cambiamento, i parametri nominati dello splatting vengono spostati alla fine della lista dei parametri in modo che vengano vincolati dopo che tutti i parametri nominati esplicitamente specificati sono stati legati. Il binding dei parametri per funzioni semplici non genera un errore quando non si trova un parametro specificato con nome. Parametri nominati sconosciuti sono legati al $args parametro della funzione semplice. Spostando lo splatting alla fine della lista degli argomenti, cambia l'ordine in cui i parametri appaiono in $args.

    Per esempio:

    function SimpleTest {
        param(
            $Name,
            $Path
        )
        "Name: $Name; Path: $Path; Args: $args"
    }
    

    Nel comportamento precedente, MyPath non è vincolato perché -Path è il terzo argomento nella lista degli argomenti. ## Quindi finisce per essere infilato in '$args' insieme a Blah = "World"

    PS> $hash = @{ Name = "Hello"; Blah = "World" }
    PS> SimpleTest @hash "MyPath"
    Name: Hello; Path: ; Args: -Blah: World MyPath
    

    Con questo cambiamento, gli argomenti da @hash vengono spostati alla fine della lista degli argomenti. MyPath diventa il primo argomento della lista, quindi è vincolato a -Path.

    PS> SimpleTest @hash "MyPath"
    Name: Hello; Path: MyPath; Args: -Blah: World
    
  • Fai in modo che il parametro -Qualifier dell'interruttore non sia posizionale per Split-Path (#12960) (Grazie @yecril71pl!)

  • Risolvi la directory di lavoro come percorso letterale per Start-Process quando non è specificato (#11946) (Grazie @NoMoreFood!)

  • Fai funzionare -OutFile i parametri nei web cmdlet come -LiteralPath (#11701) (Grazie @iSazonov!)

  • Correggere il binding dei parametri della stringa per BigInteger i letterali numerici (#11634) (Grazie @vexx32!)

  • Su Windows, Start-Process crea un ambiente di processo con tutte le variabili dell'ambiente della sessione corrente, usando -UseNewEnvironment crea un nuovo ambiente di processo predefinito (#10830) (Grazie @iSazonov!)

  • Non avvolgere il risultato return in PSObject quando si converte a ScriptBlock in delegato (#10619)

    Quando a ScriptBlock viene convertito in un tipo delegato da usare nel contesto C#, avvolgere il risultato in a PSObject porta a problemi inutili:

    • Quando il valore viene convertito nel tipo di ritorno delegato, il PSObject viene essenzialmente srotolato. Quindi non PSObject è necessario.
    • Quando il tipo di ritorno delegato è object, viene avvolto in un PSObject , rendendo difficile lavorarci in codice C#.

    Dopo questo cambiamento, l'oggetto restituito diventa l'oggetto sottostante.