Novità di PowerShell 7.1
Il 11 novembre 2020 abbiamo annunciato la disponibilità generale di PowerShell 7.1. Fondando gli sviluppi sulle basi consolidate di PowerShell 7.0, le nostre attività si sono concentrate sui problemi della community e includono una serie di miglioramenti e correzioni. Ci impegniamo a garantire che PowerShell rimanga una piattaforma stabile ed efficiente.
PowerShell 7.1 include le funzionalità, gli aggiornamenti e le modifiche di rilievo seguenti.
- PSReadLine 2.1.0, che include IntelliSense predittivo
- PowerShell 7.1 è stato pubblicato in 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 di rilievo 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 IntelliSense predittivo. Per altre informazioni sulla funzionalità IntelliSense predittivo leggere la comunicazione nel blog di PowerShell.
Pacchetto del programma di installazione di Microsoft Store
PowerShell 7.1 è stato pubblicato in Microsoft Store. È possibile trovare la versione di PowerShell nel sito Web Microsoft Store o nell'applicazione Store in Windows.
Vantaggi del pacchetto di Microsoft Store:
- Aggiornamenti automatici integrati in Windows
- Integrazione con altri meccanismi di distribuzione software come Intune e SCCM
Nota
Non è possibile modificare le impostazioni di configurazione a livello di sistema archiviate in $PSHOME
, inclusa 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 programmi di installazione
Per informazioni aggiornate sui sistemi operativi supportati e il ciclo di vita del supporto, vedere Ciclo di vita del supporto di PowerShell.
Vedere le istruzioni di installazione per il sistema operativo preferito:
PowerShell 7.1 supporta anche le versioni ARM32 e ARM64 Debian e Ubuntu e la versione ARM64 Alpine Linux.
Sebbene non siano supportati ufficialmente, la community ha offerto anche pacchetti per Arch e Kali Linux.
Nota
Debian 10+, CentOS 8+, Ubuntu 20.04, Alpine e Arm attualmente non supportano la comunicazione remota WinRM. Per informazioni dettagliate sulla configurazione della comunicazione remota basata su SSH, vedere Comunicazione remota di PowerShell su SSH.
Funzionalità sperimentali
Per altre informazioni sulle funzionalità sperimentali, vedere Uso delle funzionalità sperimentali.
Le funzionalità sperimentali seguenti sono ora funzionalità mainstream in questa versione:
Le funzionalità sperimentali seguenti sono state aggiunte in questa versione:
Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace
- PowerShell 7.1 estende questa funzionalità sperimentale per aggiungere il parametro Runspace a tutti i
*-PSBreakpoint
cmdlet. Il parametro Runspace specifica un oggetto Spazio di esecuzione per interagire con i punti di interruzione nello spazio di esecuzione specificato.
- PowerShell 7.1 estende questa funzionalità sperimentale per aggiungere il parametro Runspace a tutti i
PSNativePSPathResolution : questa funzionalità consente di passare i percorsi del provider di PowerShell ai comandi nativi che non supportano la sintassi del percorso di PowerShell.
PSCultureInvariantReplaceOperator : quando l'operando a sinistra in un'istruzione
-replace
dell'operatore non è una stringa, tale operando viene convertito in una stringa. Con la funzionalità abilitata, la conversione non usa le impostazioni cultura per la conversione di stringhe.PSSubsystemPluginModel pone le basi per supportare i plug-in Predittivi IntelliSense futuri.
Modifiche e miglioramenti di rilievo
Comportamento di confronto stringa modificato in .NET 5.0
PowerShell 7.1 è basato su .NET 5.0, che ha introdotto la modifica di rilievo seguente:
A partire da .NET 5.0, i confronti delle stringhe invarianti ignorano i caratteri di controllo non di stampa.
Ad esempio, le due stringhe seguenti vengono considerate identiche:
# Escape sequence "`a" is Ctrl-G or [char]7 'Food' -eq "Foo`ad"
True
Correzione
$?
da non essere$false
quando il comando nativo scrive instderr
(#13395)È comune che i comandi nativi vengano scritti in
stderr
senza voler indicare un errore. Con questa modifica$?
è impostata su$false
solo quando il comando nativo ha anche un codice di uscita diverso da zero. Questa modifica non è correlata alla funzionalitàPSNotApplyErrorActionToStderr
sperimentale .Non
$ErrorActionPreference
influire sull'outputstderr
dei comandi nativi (#13361)È comune che i comandi nativi vengano scritti in
stderr
senza voler indicare un errore. Con questa modifica,stderr
l'output viene ancora acquisito negli oggetti ErrorRecord , ma il runtime non si applica$ErrorActionPreference
più se errorRecord proviene da un comando nativo.Rinominare
-FromUnixTime
su su-UnixTimeSeconds
Get-Date
per consentire l'input ora Unix (#13084) (grazie @aetos382!)Il
-FromUnixTime
parametro è stato aggiunto durante la versione 7.1-preview.2. Il parametro è stato rinominato in modo che corrisponda meglio al tipo di dati. Questo parametro accetta un valore intero che rappresenta in secondi dal 1° gennaio 1970, 0:00:00.In questo esempio viene convertito un tempo Unix (rappresentato dal numero di secondi dal 1970-01-01 01 0:00:00) a DateTime.
Get-Date -UnixTimeSeconds 1577836800 Wednesday, January 01, 2020 12:00:00 AM
Autorizzazione per il parametro denominato specificato in modo esplicito a sostituire lo stesso parametro dallo splatting delle tabelle hash (#13162)
Con questa modifica, i parametri denominati da splatting vengono spostati alla fine dell'elenco di parametri in modo che vengano associati dopo che tutti i parametri denominati specificati in modo esplicito siano associati. L'associazione di parametri per funzioni semplici non genera un errore quando non è possibile trovare un parametro denominato specificato. I parametri denominati sconosciuti sono associati al
$args
parametro della funzione semplice. Lo spostamento dello splatting alla fine dell'elenco di argomenti modifica l'ordine in cui vengono visualizzati i parametri in$args
.Ad esempio:
function SimpleTest { param( $Name, $Path ) "Name: $Name; Path: $Path; Args: $args" }
Nel comportamento precedente MyPath non è associato
-Path
perché è il terzo argomento nell'elenco degli argomenti. ## Quindi finisce di essere riempito in '$args' insieme aBlah = "World"
PS> $hash = @{ Name = "Hello"; Blah = "World" } PS> SimpleTest @hash "MyPath" Name: Hello; Path: ; Args: -Blah: World MyPath
Con questa modifica, gli argomenti da
@hash
vengono spostati alla fine dell'elenco di argomenti. MyPath diventa il primo argomento nell'elenco, quindi è associato a-Path
.PS> SimpleTest @hash "MyPath" Name: Hello; Path: MyPath; Args: -Blah: World
Impostare il parametro
-Qualifier
switch non posizionale perSplit-Path
(#12960) (Grazie @yecril71pl!)Risolvere la directory di lavoro come percorso letterale per
Start-Process
quando non è specificato (#11946) (Grazie) @NoMoreFood!)Impostare
-OutFile
il parametro nei cmdlet Web per funzionare come-LiteralPath
(#11701) (Grazie @iSazonov!)Correzione dell'associazione di parametri stringa per
BigInteger
valori letterali numerici (#11634) (grazie) @vexx32!)In Windows
Start-Process
crea un ambiente di processo con tutte le variabili di ambiente della sessione corrente, usando-UseNewEnvironment
crea un nuovo ambiente di processo predefinito (#10830) (Grazie) @iSazonov!)Non eseguire il wrapping del risultato
PSObject
restituito durante la conversione di un oggetto in unScriptBlock
delegato (#10619)Quando un
ScriptBlock
oggetto viene convertito in un tipo delegato da usare nel contesto C#, il wrapping del risultatoPSObject
comporta problemi non utilizzati:- Quando il valore viene convertito nel tipo restituito delegato, l'oggetto
PSObject
viene essenzialmente annullato. Quindi l'oggettoPSObject
non è necessario. - Quando il tipo restituito delegato è
object
, viene eseguito il wrapping in unPSObject
elemento che rende difficile l'uso nel codice C#.
Dopo questa modifica, l'oggetto restituito è l'oggetto sottostante.
- Quando il valore viene convertito nel tipo restituito delegato, l'oggetto