Migrazione da Windows PowerShell 5.1 a PowerShell 7
Progettato per ambienti cloud, on-premise e ibridi, PowerShell 7 è dotato di miglioramenti e nuove funzionalità.
- Installa ed esegue affiancato a Windows PowerShell
- Maggiore compatibilità con i moduli di Windows PowerShell esistenti
- Nuove funzionalità del linguaggio, come gli operatori ternari e
ForEach-Object -Parallel
- Prestazioni migliorate
- Comunicazione remota basata su SSH
- Interoperabilità multipiattaforma
- Supporto per i contenitori Docker
PowerShell 7 funziona side-by-side con Windows PowerShell, consentendo di testare e confrontare facilmente le edizioni prima della distribuzione. La migrazione è semplice, rapida e sicura.
PowerShell 7 è supportato nei sistemi operativi Windows seguenti:
- Windows 10 e 11
- Windows Server 2016, 2019 e 2022
PowerShell 7 viene eseguito anche in macOS e in diverse distribuzioni Linux. Per un elenco dei sistemi operativi supportati e delle informazioni sul ciclo di vita del supporto, vedere ciclo di vita del supporto di PowerShell.
Installazione di PowerShell 7
Per flessibilità e per supportare le esigenze dell'IT, dei tecnici DevOps e degli sviluppatori, sono disponibili diverse opzioni per installare PowerShell 7. Nella maggior parte dei casi, le opzioni di installazione possono essere ridotte ai metodi seguenti:
Nota
Il pacchetto MSI può essere distribuito e aggiornato con prodotti di gestione come Microsoft Configuration Manager. Scaricare i pacchetti dalla pagina di rilascio di GitHub .
La distribuzione del pacchetto MSI richiede l'autorizzazione di amministratore. Il pacchetto ZIP può essere distribuito da qualsiasi utente. Il pacchetto ZIP è il modo più semplice per installare PowerShell 7 per i test, prima di eseguire il commit in un'installazione completa.
È anche possibile installare PowerShell 7 tramite Windows Store o winget
. Per ulteriori informazioni su entrambi i metodi, consultare le istruzioni dettagliate in Installazione di PowerShell su Windows.
L'uso affiancato di PowerShell 7 con Windows PowerShell 5.1
PowerShell 7 è progettato per coesistere con Windows PowerShell 5.1. Le funzionalità seguenti assicurano che l'investimento in PowerShell sia protetto e che la migrazione a PowerShell 7 sia semplice.
- Percorso di installazione e nome eseguibile separati
- PSModulePath separato
- Profili separati per ogni versione
- Compatibilità dei moduli migliorata
- Nuovi endpoint remoti
- Supporto per i criteri di Gruppo
- Separare i registri degli eventi
Differenze nelle versioni di .NET
PowerShell 7.4 è basato su .NET 8.0. Windows PowerShell 5.1 è basato su .NET Framework 4.x. Le differenze tra le versioni di .NET possono influire sul comportamento degli script, soprattutto se si chiama direttamente il metodo .NET. Per altre informazioni, Differenze tra "Windows PowerShell 5.1" e "PowerShell 7.x".
Percorso di installazione separato e nome eseguibile
PowerShell 7 viene installato in una nuova directory, consentendo l'esecuzione affiancata con Windows PowerShell 5.1.
Percorsi di installazione per versione:
- Windows PowerShell 5.1:
$env:WINDIR\System32\WindowsPowerShell\v1.0
- PowerShell 6.x:
$env:ProgramFiles\PowerShell\6
- PowerShell 7:
$env:ProgramFiles\PowerShell\7
Il nuovo percorso viene aggiunto alla variabile PATH permettendoti di eseguire sia Windows PowerShell 5.1 che PowerShell 7. Se si esegue la migrazione da PowerShell 6.x a PowerShell 7, PowerShell 6 viene rimosso e il percorso è stato sostituito.
In Windows PowerShell il file eseguibile di PowerShell è denominato powershell.exe
. Nella versione 6 e successive il file eseguibile è denominato pwsh.exe
. Il nuovo nome facilita il supporto dell'esecuzione parallela di entrambe le versioni.
PSModulePath separato
Per impostazione predefinita, Windows PowerShell e PowerShell 7 archivia i moduli in posizioni diverse. PowerShell 7 combina tali posizioni nella variabile di ambiente $Env:PSModulePath
. Quando si importa un modulo in base al nome, PowerShell controlla il percorso specificato da $Env:PSModulePath
. Ciò consente a PowerShell 7 di caricare sia i moduli Core che Desktop.
Ambito di installazione | Windows PowerShell 5.1 | PowerShell 7.0 |
---|---|---|
Moduli di PowerShell | $env:WINDIR\system32\WindowsPowerShell\v1.0\Modules |
$env:ProgramFiles\PowerShell\7\Modules |
Installazione effettuata dall'utente Ambito AllUsers |
$env:ProgramFiles\WindowsPowerShell\Modules |
$env:ProgramFiles\PowerShell\Modules |
Installato dall'utente Ambito CurrentUser |
$HOME\Documents\WindowsPowerShell\Modules |
$HOME\Documents\PowerShell\Modules |
Negli esempi seguenti vengono illustrati i valori predefiniti di $Env:PSModulePath
per ogni versione.
Per Windows PowerShell 5.1:
$Env:PSModulePath -split (';')
C:\Users\<user>\Documents\WindowsPowerShell\Modules C:\Program Files\WindowsPowerShell\Modules C:\WINDOWS\System32\WindowsPowerShell\v1.0\Modules
Per PowerShell 7:
$Env:PSModulePath -split (';')
C:\Users\<user>\Documents\PowerShell\Modules C:\Program Files\PowerShell\Modules C:\Program Files\PowerShell\7\Modules C:\Program Files\WindowsPowerShell\Modules C:\WINDOWS\System32\WindowsPowerShell\v1.0\Modules
Si noti che PowerShell 7 include i percorsi di Windows PowerShell e i percorsi di PowerShell 7 per fornire il caricamento automatico dei moduli.
Nota
È possibile che esistano percorsi aggiuntivi se è stata modificata la variabile di ambiente PSModulePath o se sono stati installati moduli o applicazioni personalizzati.
Per altre informazioni, vedere about_PSModulePath.
Per altre informazioni sui moduli, vedere about_Modules.
Profili separati
Un profilo di PowerShell è uno script che viene eseguito all'avvio di PowerShell. Questo script consente di personalizzare l'ambiente aggiungendo comandi, alias, funzioni, variabili, moduli e unità di PowerShell. Lo script del profilo rende queste personalizzazioni disponibili in ogni sessione senza dover ricrearle manualmente.
Il percorso che conduce alla posizione del profilo è cambiato in PowerShell 7.
- In Windows PowerShell 5.1 il percorso del profilo è
$HOME\Documents\WindowsPowerShell
. - In PowerShell 7 il percorso del profilo è
$HOME\Documents\PowerShell
.
Anche i nomi file del profilo sono stati modificati:
$PROFILE | Select-Object *Host* | Format-List
AllUsersAllHosts : C:\Program Files\PowerShell\7\profile.ps1
AllUsersCurrentHost : C:\Program Files\PowerShell\7\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts : C:\Users\<user>\Documents\PowerShell\profile.ps1
CurrentUserCurrentHost : C:\Users\<user>\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
Per altre informazioni about_Profiles.
Compatibilità di PowerShell 7 con i moduli di Windows PowerShell 5.1
La maggior parte dei moduli usati in Windows PowerShell 5.1 funziona già con PowerShell 7, tra cui Azure PowerShell e Active Directory. Microsoft sta continuando a collaborare con altri team per aggiungere il supporto nativo di PowerShell 7 per altri moduli, tra cui Microsoft Graph, Office 365 e altri. Per l'elenco corrente dei moduli supportati, vedere compatibilità dei moduli di PowerShell 7.
Nota
In Windows è stata aggiunta anche un'opzione UseWindowsPowerShell per Import-Module
semplificare la transizione a PowerShell 7 per gli utenti che usano moduli incompatibili. Per altre informazioni su questa funzionalità, vedere about_Windows_PowerShell_Compatibility.
Comunicazione remota di PowerShell
Il remoting di PowerShell consente di eseguire qualsiasi comando di PowerShell su uno o più computer remoti. È possibile stabilire connessioni permanenti, avviare sessioni interattive ed eseguire script nei computer remoti.
WS-Management comunicazione remota
Windows PowerShell 5.1 e versioni successive usano il protocollo WS-Management (WSMAN) per la negoziazione della connessione e il trasporto dati. Gestione remota Windows (WinRM) usa il protocollo WSMAN. Se WinRM è stato abilitato, PowerShell 7 usa l'endpoint di Windows PowerShell 5.1 esistente denominato Microsoft.PowerShell
per le connessioni remote. Per aggiornare PowerShell 7 e aggiungere il proprio endpoint, eseguire il cmdlet Enable-PSRemoting
. Per informazioni sulla connessione a endpoint specifici, vedere WS-Management Comunicazione remota in PowerShell
Per usare il remoting di Windows PowerShell, è necessario configurare il computer remoto per la gestione remota. Per altre informazioni, incluse le istruzioni, vedere Informazioni sui requisiti remoti.
Per ulteriori informazioni sul lavoro con il controllo remoto, vedere Informazioni sul remoto
Remotizzazione basata su SSH
La comunicazione remota basata su SSH è stata aggiunta in PowerShell 6.x per supportare altri sistemi operativi che non possono usare componenti nativi di Windows come WinRM. La comunicazione remota SSH crea un processo host di PowerShell come sottosistema SSH sul computer di destinazione. Per informazioni dettagliate ed esempi sulla configurazione della comunicazione remota basata su SSH in Windows o Linux, vedere: comunicazione remota di PowerShell tramite SSH.
Nota
PowerShell Gallery (PSGallery) contiene un modulo e un cmdlet che configura automaticamente la comunicazione remota basata su SSH. Installare il modulo Microsoft.PowerShell.RemotingTools
dal PSGallery ed eseguire il cmdlet Enable-SSH
.
I cmdlet New-PSSession
, Enter-PSSession
e Invoke-Command
dispongono di nuovi set di parametri per supportare le connessioni SSH.
[-HostName <string>] [-UserName <string>] [-KeyFilePath <string>]
Per creare una sessione remota, specificare il computer di destinazione con il parametro Nome Host e specificare il nome utente con UserName. Quando si eseguono i cmdlet in modo interattivo, viene richiesta una password.
Enter-PSSession -HostName <Computer> -UserName <Username>
In alternativa, quando si utilizza il parametro HostName, specificare le informazioni sul nome utente seguite dalla chiocciola (@
), seguite dal nome del computer.
Enter-PSSession -HostName <Username>@<Computer>
È possibile configurare l'autenticazione della chiave SSH usando un file di chiave privata con il parametro KeyFilePath
Criteri di gruppo supportati
PowerShell include impostazioni di Criteri di gruppo che consentono di definire valori di opzione coerenti per i server in un ambiente aziendale. Queste impostazioni includono:
- Configurazione della sessione della console: imposta un endpoint di configurazione in cui viene eseguito PowerShell.
- Attiva la registrazione del modulo: imposta la proprietà LogPipelineExecutionDetails dei moduli.
- Attivare la registrazione di blocchi di script di PowerShell: abilita la registrazione dettagliata di tutti gli script di PowerShell.
- Attiva esecuzione script: imposta i criteri di esecuzione di PowerShell.
- Attivare la trascrizione di PowerShell: consente l'acquisizione dell'input e dell'output dei comandi di PowerShell in trascrizioni basate su testo.
- Imposta il percorso di origine predefinito per Update-Help: imposta l'origine della Guida aggiornabile su una directory, anziché su Internet.
Per altre informazioni, vedere about_Group_Policy_Settings.
PowerShell 7 include modelli di Criteri di gruppo e uno script di installazione in $PSHOME
.
Gli strumenti di Criteri di gruppo usano file di modelli amministrativi (.admx
, .adml
) per popolare le impostazioni dei criteri nell'interfaccia utente. In questo modo gli amministratori possono gestire le impostazioni delle politiche basate sul Registro di sistema. Lo script InstallPSCorePolicyDefinitions.ps1
installa i modelli amministrativi di PowerShell nel computer locale.
Get-ChildItem -Path $PSHOME -Filter *Core*Policy*
Directory: C:\Program Files\PowerShell\7
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2/27/2020 12:38 AM 15861 InstallPSCorePolicyDefinitions.ps1
-a--- 2/27/2020 12:28 AM 9675 PowerShellCoreExecutionPolicy.adml
-a--- 2/27/2020 12:28 AM 6201 PowerShellCoreExecutionPolicy.admx
Separare i registri degli eventi
Windows PowerShell e PowerShell 7 registrano eventi sui registri degli eventi separati. Usare il comando seguente per ottenere un elenco dei log di PowerShell.
Get-WinEvent -ListLog *PowerShell*
Per altre informazioni, vedere about_Logging_Windows.
Esperienza di modifica migliorata con Visual Studio Code
Visual Studio Code (VSCode) con l'estensione PowerShell è l'ambiente di scripting supportato per PowerShell 7. Windows PowerShell Integrated Scripting Environment (ISE) supporta solo Windows PowerShell.
L'estensione PowerShell aggiornata include:
- Nuova modalità di compatibilità ISE
- PSReadLine nella console integrata, inclusi l'evidenziazione della sintassi, la modifica su più righe e la ricerca inversa
- Miglioramenti della stabilità e delle prestazioni
- Nuova integrazione di CodeLens
- Completamento automatico del percorso migliorato
Per semplificare la transizione a Visual Studio Code, usare la funzione
Per passare al nuovo layout ISE, premere Ctrl+Shift+P per aprire la Palette dei comandi , digitare PowerShell
e selezionare PowerShell: Abilita la modalità ISE.
Per impostare il layout sul layout originale, aprire la tavolozza comandi , selezionare PowerShell: Disabilita modalità ISE (ripristino impostazioni predefinite).
Per informazioni dettagliate sulla personalizzazione del layout di VSCode in ISE, vedere Come replicare l'esperienza ISE in Visual Studio Code
Nota
Non sono previsti piani per aggiornare l'ISE con nuove funzionalità. Nelle versioni più recenti di Windows 10 o Windows Server 2019 e versioni successive, ISE è ora una funzionalità disinstallabile dall'utente. Non sono previsti piani per rimuovere definitivamente l'ISE. Il team di PowerShell e i suoi partner sono incentrati sul miglioramento dell'esperienza di scripting nell'estensione PowerShell per Visual Studio Code.
Passaggi successivi
Fornito delle conoscenze per eseguire efficacemente la migrazione, installa PowerShell 7 ora!