Migrazione da Windows PowerShell 5.1 a PowerShell 7Migrating from Windows PowerShell 5.1 to PowerShell 7

PowerShell 7 è progettato per ambienti cloud, locali e ibridi e include miglioramenti e nuove funzionalità.Designed for cloud, on-premises, and hybrid environments, PowerShell 7 is packed with enhancements and new features.

  • Installazione ed esecuzione side-by-side con Windows PowerShellInstalls and runs side-by-side with Windows PowerShell
  • Compatibilità migliorata con i moduli di Windows PowerShell esistentiImproved compatibility with existing Windows PowerShell modules
  • Nuove funzionalità di linguaggio, come operatori ternari e ForEach-Object -ParallelNew language features, like ternary operators and ForEach-Object -Parallel
  • prestazioni migliorateImproved performance
  • Comunicazione remota basata su SSHSSH-based remoting
  • Interoperabilità tra piattaformeCross-platform interoperability
  • Supporto per i contenitori DockerSupport for Docker containers

PowerShell 7 viene eseguito side-by-side con Windows PowerShell in modo da consentire l'esecuzione semplificata di test e confronti tra le edizioni prima della distribuzione.PowerShell 7 works side-by-side with Windows PowerShell letting you easily test and compare between editions before deployment. La migrazione è semplice, rapida e sicura.Migration is simple, quick, and safe.

PowerShell 7 è supportato nei sistemi operativi Windows seguenti:PowerShell 7 is supported on the following Windows operating systems:

  • Windows 8.1 e 10Windows 8.1 and 10
  • Windows Server 2012, 2012 R2, 2016 e 2019Windows Server 2012, 2012 R2, 2016, and 2019

PowerShell 7 viene eseguito anche in macOS e in diverse distribuzioni di Linux.PowerShell 7 also runs on macOS and several Linux distributions. Per un elenco dei sistemi operativi supportati e informazioni sul ciclo di vita del supporto, vedere Ciclo di vita del supporto di PowerShell.For a list of supported operating systems and information about the support lifecycle, see the PowerShell Support Lifecycle.

Installazione di PowerShell 7Installing PowerShell 7

Per garantire flessibilità e per supportare le esigenze dell'IT, dei i tecnici DevOps e degli sviluppatori, sono disponibili diverse opzioni per l'installazione di PowerShell 7.For flexibility and to support the needs of IT, DevOps engineers, and developers, there are several options available to install PowerShell 7. Nella maggior parte dei casi le opzioni di installazione possono essere ridotte ai metodi seguenti:In most cases, the installation options can be reduced to the following methods:

Nota

Il pacchetto MSI può essere distribuito e aggiornato con prodotti gestionali come System Center Configuration Manager (SCCM).The MSI package can be deployed and updated with management products such as System Center Configuration Manager (SCCM). Scaricare i pacchetti dalla pagina della versione di GitHub.Download the packages from GitHub Release page.

La distribuzione del pacchetto MSI richiede l'autorizzazione di amministratore.Deploying the MSI package requires Administrator permission. Il pacchetto ZIP può essere distribuito da qualsiasi utente.The ZIP package can be deployed by any user. Il pacchetto ZIP è il modo più semplice per installare PowerShell 7 per i test, prima di eseguire il commit in un'installazione completa.The ZIP package is the easiest way to install PowerShell 7 for testing, before committing to a full installation.

Uso di PowerShell 7 side-by-side con Windows PowerShell 5.1Using PowerShell 7 side-by-side with Windows PowerShell 5.1

PowerShell 7 è progettato per coesistere con Windows PowerShell 5.1.PowerShell 7 is designed to coexist with Windows PowerShell 5.1. Le funzionalità seguenti garantiscono la protezione dell'investimento in PowerShell e la semplicità della migrazione a PowerShell 7.The following features ensure that your investment in PowerShell is protected and your migration to PowerShell 7 is simple.

  • Percorso di installazione separato e nome dell'eseguibileSeparate installation path and executable name
  • PSModulePath separatoSeparate PSModulePath
  • Profili separati per ogni versioneSeparate profiles for each version
  • Compatibilità dei moduli migliorataImproved module compatibility
  • Nuovi endpoint remotiNew remoting endpoints
  • Supporto di Criteri di gruppoGroup policy support
  • Registri eventi separatiSeparate Event logs

Percorso di installazione separato e nome dell'eseguibileSeparate installation path and executable name

PowerShell 7 viene installato in una nuova directory, consentendo l'esecuzione side-by-side con Windows PowerShell 5.1.PowerShell 7 installs to a new directory, enabling side-by-side execution with Windows PowerShell 5.1.

Percorsi di installazione per versione:Install locations by version:

  • Windows PowerShell 5.1: $env:WINDIR\System32\WindowsPowerShell\v1.0Windows PowerShell 5.1: $env:WINDIR\System32\WindowsPowerShell\v1.0
  • PowerShell Core 6.x: $env:ProgramFiles\PowerShell\6PowerShell Core 6.x: $env:ProgramFiles\PowerShell\6
  • PowerShell 7: $env:ProgramFiles\PowerShell\7PowerShell 7: $env:ProgramFiles\PowerShell\7

La nuova posizione viene aggiunta all'elemento PATH in modo che sia possibile eseguire sia Windows PowerShell 5.1 che PowerShell 7.The new location is added to your PATH allowing you to run both Windows PowerShell 5.1 and PowerShell 7. Se si sta eseguendo la migrazione da PowerShell Core 6.x a PowerShell 7, PowerShell 6 viene rimosso e l'elemento PATH viene sostituito.If you're migrating from PowerShell Core 6.x to PowerShell 7, PowerShell 6 is removed and the PATH replaced.

In Windows PowerShell l'eseguibile di PowerShell è denominato powershell.exe.In Windows PowerShell, the PowerShell executable is named powershell.exe. A partire dalla versione 6 l'eseguibile è denominato pwsh.exe.In version 6 and above, the executable is named pwsh.exe. Il nuovo nome consente di semplificare il supporto dell'esecuzione side-by-side di entrambe le versioni.The new name makes it easy to support side-by-side execution of both versions.

PSModulePath separatoSeparate PSModulePath

Per impostazione predefinita, Windows PowerShell e PowerShell 7 archiviano i moduli in percorsi diversi.By default, Windows PowerShell and PowerShell 7 store modules in different locations. PowerShell 7 combina tali percorsi nella variabile di ambiente $Env:PSModulePath.PowerShell 7 combines those locations in the $Env:PSModulePath environment variable. Quando si importa un modulo in base al nome, PowerShell controlla il percorso specificato da $Env:PSModulePath.When importing a module by name, PowerShell checks the location specified by $Env:PSModulePath. Questo consente a PowerShell 7 di caricare sia i moduli Core che Desktop.This allows PowerShell 7 to load both Core and Desktop modules.

Ambito di installazioneInstall Scope Windows PowerShell 5.1Windows PowerShell 5.1 PowerShell 7.0PowerShell 7.0
Moduli di PowerShellPowerShell modules $env:WINDIR\system32\WindowsPowerShell\v1.0\Modules $PSHOME\Modules
Installato da utente - User installed
Ambito AllUsersAllUsers scope
$env:ProgramFiles\WindowsPowerShell\Modules $env:ProgramFiles\PowerShell\Modules
Installato da utente - User installed
Ambito CurrentUserCurrentUser scope
$HOME\Documents\WindowsPowerShell\Modules $HOME\Documents\PowerShell\Modules

Negli esempi seguenti vengono illustrati i valori predefiniti di $Env:PSModulePath per ogni versione.The following examples show the default values of $Env:PSModulePath for each version.

  • Per Windows PowerShell 5.1:For 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:For 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 consentire il caricamento automatico dei moduli.Notice that PowerShell 7 includes the Windows PowerShell paths and the PowerShell 7 paths to provide autoloading of modules.

Nota

Potrebbero esistere percorsi aggiuntivi se è stata modificata la variabile di ambiente PSModulePath o se sono stati installati moduli o applicazioni personalizzati.Additional paths may exist if you have changed the PSModulePath environment variable or installed custom modules or applications.

Per altre informazioni, vedere PSModulePath in Informazioni sulle variabili di ambiente.For more information, see PSModulePath in about_Environment_Variables.

Per altre informazioni sui moduli, vedere Informazioni sui moduli.For more information about Modules, see about_Modules.

Profili separatiSeparate profiles

Il profilo di PowerShell è uno script che viene eseguito all'avvio di PowerShell.A PowerShell profile is a script that executes when PowerShell starts. Questo script personalizza l'ambiente tramite l'aggiunta di comandi, alias, funzioni, variabili, moduli e unità PowerShell.This script customizes your environment by adding commands, aliases, functions, variables, modules, and PowerShell drives. Lo script del profilo rende disponibili queste personalizzazioni in ogni sessione senza che sia necessario ricrearle manualmente.The profile script makes these customizations available in every session without having to manually recreate them.

Il percorso della posizione del profilo è stato modificato in PowerShell 7.The path to the location of the profile has changed in PowerShell 7.

  • In Windows PowerShell 5.1 il percorso del profilo è $HOME\Documents\WindowsPowerShell.In Windows PowerShell 5.1, the location of the profile is $HOME\Documents\WindowsPowerShell.
  • In PowerShell 7 il percorso del profilo è $HOME\Documents\PowerShell.In PowerShell 7, the location of the profile is $HOME\Documents\PowerShell.

Sono stati modificati anche i nomi file del profilo:The profile filenames have also changed:

PS> $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, vedere Informazioni sui profili.For more information about_Profiles.

Compatibilità di PowerShell 7 con i moduli di Windows PowerShell 5.1PowerShell 7 compatibility with Windows PowerShell 5.1 modules

La maggior parte dei moduli usati in Windows PowerShell 5.1, tra cui Azure PowerShell e Active Directory, funziona già con PowerShell 7.Most of the modules you use in Windows PowerShell 5.1 already work with PowerShell 7, including Azure PowerShell and Active Directory. Stiamo 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 ancora.We're continuing to work with other teams to add native PowerShell 7 support for more modules including Microsoft Graph, Office 365, and others. Per l'elenco corrente dei moduli supportati, vedere Compatibilità dei moduli di PowerShell 7.For the current list of supported modules, see PowerShell 7 module compatibility.

Nota

In Windows è stato aggiunto anche un commutatore UseWindowsPowerShell per Import-Module per semplificare la transizione a PowerShell 7 per chi usa moduli incompatibili.On Windows, we've also added a UseWindowsPowerShell switch to Import-Module to ease the transition to PowerShell 7 for those using incompatible modules. Per altre informazioni su questa funzionalità, vedere Informazioni sulla compatibilità di Windows PowerShell.For more information on this functionality, see about_Windows_PowerShell_Compatibility.

Comunicazione remota di PowerShellPowerShell Remoting

La comunicazione remota di Windows PowerShell consente di eseguire qualsiasi comando di PowerShell in uno o più computer remoti.PowerShell remoting lets you run any PowerShell command on one or more remote computers. È possibile stabilire connessioni permanenti, avviare sessioni interattive ed eseguire script in computer remoti.You can establish persistent connections, start interactive sessions, and run scripts on remote computers.

Comunicazione remota di WS-ManagementWS-Management remoting

Windows PowerShell 5.1 e versioni precedenti usano il protocollo WS-Management (WSMAN) per la negoziazione della connessione e il trasporto dei dati.Windows PowerShell 5.1 and below use the WS-Management (WSMAN) protocol for connection negotiation and data transport. Gestione remota Windows (WinRM) usa il protocollo WSMAN.Windows Remote Management (WinRM) uses the WSMAN protocol. Se WinRM è stato abilitato, PowerShell 7 usa l'endpoint di Windows PowerShell 5.1 esistente denominato Microsoft.PowerShell per le connessioni remote.If WinRM has been enabled, PowerShell 7 uses the existing Windows PowerShell 5.1 endpoint named Microsoft.PowerShell for remoting connections. Per aggiornare PowerShell 7 in modo da includere il proprio endpoint, eseguire il cmdlet Enable-PSRemoting.To update PowerShell 7 to include its own endpoint, run the Enable-PSRemoting cmdlet. Per informazioni sulla connessione a endpoint specifici, vedere Comunicazione remota di WS-Management in PowerShell CoreFor information about connecting to specific endpoints, see WS-Management Remoting in PowerShell Core

Per usare la comunicazione remota di Windows PowerShell, è necessario che il computer remoto sia configurato per la gestione remota.To use Windows PowerShell remoting, the remote computer must be configured for remote management. Per altre informazioni, incluse le istruzioni, vedere about_Remote_Requirements.For more information, including instructions, see About Remote Requirements.

Per altre informazioni sull'uso della comunicazione remota, vedere Informazioni sulla comunicazione remotaFor more information about working with remoting, see About Remote

Comunicazione remota basata su SSHSSH-based remoting

La comunicazione remota basata su SSH è stata aggiunta in PowerShell Core 6.x per supportare altri sistemi operativi che non possono usare componenti nativi di Windows come WinRM.SSH-based remoting was added in PowerShell Core 6.x to support other operating systems that can't use Windows native components like WinRM. La comunicazione remota SSH crea un processo host di PowerShell nel computer di destinazione come sottosistema SSH.SSH remoting creates a PowerShell host process on the target computer as an SSH subsystem. Per informazioni dettagliate ed esempi su come configurare la comunicazione remota basata su SSH in Windows o Linux, vedere: Comunicazione remota di PowerShell su SSH.For details and examples on setting up SSH-based remoting on Windows or Linux, see: PowerShell remoting over SSH.

Nota

PowerShell Gallery (PSGallery) contiene un modulo e un cmdlet che configura automaticamente la comunicazione remota basata su SSH.The PowerShell Gallery (PSGallery) contains a module and cmdlet that automatically configures SSH-based remoting. Installare il modulo Microsoft.PowerShell.RemotingTools da PSGallery ed eseguire il cmdlet Enable-SSH.Install the Microsoft.PowerShell.RemotingTools module from the PSGallery and run the Enable-SSH cmdlet.

I cmdlet New-PSSession, Enter-PSSession e Invoke-Command includono nuovi set di parametri per supportare le connessioni SSH.The New-PSSession, Enter-PSSession, and Invoke-Command cmdlets have new parameter sets to support SSH connections.

[-HostName <string>]  [-UserName <string>]  [-KeyFilePath <string>]

Per creare una sessione remota, specificare il computer di destinazione con il parametro HostName e il nome utente con il parametro UserName.To create a remote session, specify the target computer with the HostName parameter and provide the user name with UserName. Quando si eseguono i cmdlet in modo interattivo, viene chiesto di immettere una password.When running the cmdlets interactively, you're prompted for a password.

Enter-PSSession -HostName <Computer> -UserName <Username>

In alternativa, quando si usa il parametro HostName, specificare le informazioni sul nome utente seguite dal simbolo di chiocciola (@), seguito dal nome del computer.Alternatively, when using the HostName parameter, provide the username information followed by the at sign (@), followed by the computer name.

Enter-PSSession -HostName <Username>@<Computer>

È anche possibile configurare l'autenticazione con chiave SSH con il parametro KeyFilePath.You may set up SSH key authentication using a private key file with the KeyFilePath parameter. Per altre informazioni, vedere Gestione delle chiavi OpenSSH.For more information, see OpenSSH Key Management.

Supporto di Criteri di gruppoGroup Policy supported

PowerShell include le impostazioni Criteri di gruppo che consentono di definire valori di opzioni coerenti per i server in un ambiente aziendale.PowerShell includes Group Policy settings to help you define consistent option values for servers in an enterprise environment. Tali impostazioni includono:These settings include:

  • Configurazione della sessione della console: imposta un endpoint di configurazione in cui viene eseguito PowerShell.Console session configuration: Sets a configuration endpoint in which PowerShell is run.
  • Attiva registrazione moduli: imposta la proprietà LogPipelineExecutionDetails dei moduli.Turn on Module Logging: Sets the LogPipelineExecutionDetails property of modules.
  • Attiva la registrazione del blocco di script di PowerShell: abilita la registrazione dettagliata di tutti gli script di PowerShell.Turn on PowerShell Script Block Logging: Enables detailed logging of all PowerShell scripts.
  • Attiva l'esecuzione di script: imposta i criteri di esecuzione di PowerShell.Turn on Script Execution: Sets the PowerShell execution policy.
  • Attiva trascrizione di PowerShell: abilita l'acquisizione di input e output di comandi PowerShell in trascrizioni basate su testo.Turn on PowerShell Transcription: enables capturing of input and output of PowerShell commands into text-based transcripts.
  • Imposta il percorso di origine predefinito per Update-Help: imposta l'origine per la Guida aggiornabile su una directory e non su Internet.Set the default source path for Update-Help: Sets the source for Updatable Help to a directory, not the Internet.

Per altre informazioni, vedere Informazioni sulle impostazioni di Criteri di gruppo.For more information, see about_Group_Policy_Settings.

PowerShell 7 include modelli di Criteri di gruppo e uno script di installazione in $PSHOME.PowerShell 7 includes Group Policy templates and an installation script in $PSHOME.

Gli strumenti di Criteri di gruppo usano i file di modello amministrativi (.admx, .adml) per popolare le impostazioni dei criteri nell'interfaccia utente.Group Policy tools use administrative template files (.admx, .adml) to populate policy settings in the user interface. Ciò consente agli amministratori di gestire le impostazioni dei criteri basate sul Registro di sistema.This allows administrators to manage registry-based policy settings. Lo script InstallPSCorePolicyDefinitions.ps1 installa i modelli amministrativi di PowerShell Core nel computer locale.The InstallPSCorePolicyDefinitions.ps1 script installs PowerShell Core Administrative Templates on the local machine.

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

Registri eventi separatiSeparate Event Logs

Gli eventi di registro di Windows PowerShell e PowerShell 7 consentono di separare i registri eventi.Windows PowerShell and PowerShell 7 log events to separate event logs. Usare il comando seguente per visualizzare un elenco dei registri di PowerShell.Use the following command to get a list of the PowerShell logs.

Get-WinEvent -ListLog *PowerShell*

Per altre informazioni, vedere Informazioni sui registri di Windows.For more information, see about_Logging_Windows.

Esperienza di modifica migliorata con Visual Studio CodeImproved editing experience with Visual Studio Code

Visual Studio Code (VSCode) con l'estensione PowerShell è l'ambiente di scripting supportato per PowerShell 7.Visual Studio Code (VSCode) with the PowerShell Extension is the supported scripting environment for PowerShell 7. Windows PowerShell Integrated Scripting Environment (ISE) supporta solo Windows PowerShell.The Windows PowerShell Integrated Scripting Environment (ISE) only supports Windows PowerShell.

L'estensione di PowerShell aggiornata include:The updated PowerShell extension includes:

  • Nuova modalità di compatibilità di ISENew ISE compatibility mode
  • PSReadLine nella console integrata, inclusa l'evidenziazione della sintassi, la modifica a più righe e la ricerca a ritrosoPSReadLine in the Integrated Console, including syntax highlighting, multi-line editing, and back search
  • Miglioramenti alla stabilità e alle prestazioniStability and performance improvements
  • Nuova integrazione con CodeLensNew CodeLens integration
  • Completamento automatico del percorso miglioratoImproved path auto-completion

Per semplificare la transizione a Visual Studio Code, usare la funzione Enable ISE Mode (Abilita modalità ISE) disponibile in Riquadro comandi.To make the transition to Visual Studio Code easier, use the Enable ISE Mode function available in the Command Palette. Questa funzione consente a VSCode di passare a un layout di tipo ISE.This function switches VSCode into an ISE-style layout. Il layout di tipo ISE offre tutte le nuove funzionalità di PowerShell in un'esperienza utente familiare.The ISE-style layout gives you all the new features and capabilities of PowerShell in a familiar user experience.

Per passare al nuovo layout ISE, premere CTRL+MAIUSC+P per aprire Riquadro comandi, digitare PowerShell e selezionare PowerShell: Enable ISE Mode (Abilita modalità ISE).To switch to the new ISE layout, press Ctrl+Shift+P to open the Command Palette, type PowerShell and select PowerShell: Enable ISE Mode.

Per impostare il layout sul layout originale, aprire Riquadro comandi, selezionare PowerShell: Disable ISE Mode (restore to defaults) (Disabilita modalità ISE - ripristino impostazioni predefinite).To set the layout to the original layout, open the Command Palette, select PowerShell: Disable ISE Mode (restore to defaults).

Per informazioni dettagliate sulla personalizzazione del layout di VSCode in ISE, vedere Come replicare l'esperienza ISE in Visual Studio CodeFor details about customizing the VSCode layout to ISE, see How to Replicate the ISE Experience in Visual Studio Code

Nota

L'aggiornamento di ISE con le nuove funzionalità non è attualmente in programma.There no plans to update the ISE with new features. ISE è ora una funzionalità disinstallabile dall'utente nelle versioni più recenti di Windows 10 e Windows Server.The ISE is now a user-uninstallable feature in the latest versions of Windows 10 and Windows Server. La rimozione definitiva di ISE non è attualmente in programma.There are no plans to permanently remove the ISE. Il team di PowerShell e i relativi partner sono concentrati sul miglioramento dell'esperienza di scripting nell'estensione di PowerShell per Visual Studio Code.The PowerShell Team and its partners are focused on improving the scripting experience in the PowerShell extension for Visual Studio Code.

Passaggi successiviNext Steps

Una volta apprese le informazioni necessarie per eseguire la migrazione, è possibile installare PowerShell 7.Armed with the knowledge to effectively migrate, install PowerShell 7 now!