Magic Quadrant™ per la gestione degli accessi privilegiati 2025: Netwrix riconosciuta per il quarto anno consecutivo. Scarica il report.

Piattaforma
Centro risorseBlog
Controlla, aggiorna e scegli una versione di PowerShell

Controlla, aggiorna e scegli una versione di PowerShell

Oct 23, 2024

PowerShell è passato da esclusivo per Windows (5.1) a cross-platform PowerShell 7, costruito su .NET per Windows, macOS e Linux. Conoscere la propria versione è fondamentale per la compatibilità, la sicurezza e l'accesso a funzionalità moderne come l'elaborazione parallela. Controlla la tua versione con $PSVersionTable.PSVersion o interrogazioni del registro. Windows PowerShell 5.1 rimane preinstallato, ma PowerShell 7 deve essere installato manualmente tramite Microsoft Store, Winget o MSI. Eseguire entrambi in parallelo aiuta a mantenere flussi di lavoro legacy e moderni.

Potresti voler sapere quale versione di PowerShell è installata sulla tua macchina. Mentre gli utenti principianti potrebbero andare nei Programmi nel Pannello di Controllo per controllare la versione di PowerShell, spesso è una delusione non trovare PowerShell elencato come un programma lì. Invece, dovrai ricorrere ad altri metodi per scoprire la versione di PowerShell.

Questa guida fornisce una panoramica completa su come verificare la versione di PowerShell in esecuzione.

Tutorial di scripting Windows PowerShell (PDF) per principianti

Scopri di più

Introduzione alle versioni di PowerShell

PowerShell si è evoluto da uno strumento di gestione Windows a un versatile shell che può essere utilizzato su diverse piattaforme. In particolare, PowerShell Core 6.x e PowerShell 7.x lo hanno trasformato in un potente framework di automazione e scripting cross-platform.

Evoluzione delle versioni di PowerShell dalla 1.0 alla 7.x

Nel 2006, Microsoft ha lanciato PowerShell 1.0 come parte del framework .NET per il sistema operativo Windows, incluso Windows XP (SP2), Windows Server 2003 (r2 SP1) e Windows Vista. Ha introdotto cmdlet come Get-Process e Get-Service ed è stato progettato per automatizzare compiti negli ambienti Windows.

Versione

Descrizione

PowerShell 2.0

PowerShell 2.0 è stato rilasciato nel 2009. Tra le altre cose, ha introdotto il remoting (tramite WinRM) per eseguire comandi su macchine remote e l'applicazione Integrated Scripting Environment (ISE).

PowerShell 3.0

PowerShell 3.0, rilasciato nel 2012, ha introdotto i flussi di lavoro, nuovi cmdlet e lavori pianificati per l'automazione dei compiti.

PowerShell 4.0

PowerShell 4.0 (2013), 5.0 (2016) e 5.1 (2016) hanno avuto miglioramenti nei cmdlet, prestazioni e DSC. Sono state aggiunte Classi e Enum al linguaggio di scripting. Con PowerShell 5.1, c'è stato un orientamento verso l'open-source e PowerShell Core.

PowerShell Core 6.x

Poi PowerShell Core 6.x (2018) è stato reso open-source e trasferito su GitHub. Era multipiattaforma, funzionante su Windows, macOS e Linux. Non solo, ma era anche progettato per ambienti eterogenei e il cloud ibrido.

PowerShell 7.x

PowerShell 7.x (2020) è la versione più recente. Unifica Windows PowerShell e PowerShell Core in un unico flusso di versioni, supporta la parallelizzazione delle pipeline e migliora la gestione degli errori tra le altre cose.

Perché identificare la corretta versione di PowerShell

Prima di utilizzare PowerShell per le tue attività quotidiane, una domanda che potresti farti è: quale versione di PowerShell ho? Avere una risposta a questa domanda è importante perché la tua versione di PowerShell determina quali cmdlet e funzioni puoi utilizzare. Per questo e molti altri motivi, devi identificare quale versione di PowerShell ti serve per gestire le tue attività.

  • Compatibilità. Alcuni script o moduli richiedono cmdlet specifici o funzionalità disponibili solo nelle versioni più recenti di PowerShell. Le versioni moderne di PowerShell supportano gli script più vecchi, ma con avvisi di deprecazione per le funzionalità obsolete.
  • Precisione nei risultati. Alcune versioni di PowerShell potrebbero non fornire i risultati accurati che stai cercando, come quando devi soddisfare un requisito specifico o un prerequisito per eseguire un comando o caricare un modulo.
  • Supporto multipiattaforma. Per Linux o macOS, è necessario PowerShell Core o PowerShell 7.x.
  • Funzionalità avanzate. Le versioni più vecchie non supportano le ultime funzionalità, come il parallelismo del pipeline, ?? (operatore di coalescenza null) e ForEach-Object -Parallel, disponibili in PowerShell 7.x.
  • Integrazione con Cloud e DevOps. Le versioni recenti di PowerShell offrono capacità di integrazione migliorate con piattaforme cloud, come Azure, AWS, strumenti DevOps e pipeline CI/CD, facilitando la gestione basata su cloud.
  • Requisiti di sicurezza. Si consigliano le ultime versioni di PowerShell per motivi di sicurezza e conformità.
  • Configurazione dell'ambiente. Per utilizzare strumenti o automazioni in tutto l'ambiente, conoscere la versione aiuta a garantire la compatibilità tra i sistemi.

Differenze tra Windows PowerShell e PowerShell Core

Le principali differenze tra Windows PowerShell e PowerShell Core sono:

Funzionalità

Windows PowerShell

PowerShell Core

Platform

Solo per Windows

Cross-platform (Windows, macOS, Linux)

Versione

Ultima versione principale: 5.1

Rilasci continui (7.x e oltre)

Framework

Basato su .NET Framework

Basato su .NET Core (ora .NET)

Modello di rilascio

Solo correzioni di bug/sicurezza

Sviluppo attivo con nuove funzionalità

Installazione

È preinstallato con Windows OS

Deve essere scaricato separatamente da GitHub o dai gestori di pacchetti

Compatibilità retroattiva

Integrazione stretta con Windows (ad esempio, WMI, COM)

Potrebbe avere funzionalità limitate specifiche per Windows

Prestazione

Più veloce in alcuni scenari nativi di Windows

Migliori prestazioni su più piattaforme

Compatibilità del modulo

Supporta molti moduli legacy

Alcuni moduli più vecchi potrebbero non essere compatibili

Supporto per Cloud/Container

Supporto limitato per container e ambienti cloud

Miglior supporto per container e cloud

Open Source

Proprietario

Open-source (licenza MIT)

Se utilizzi funzionalità o moduli specifici per Windows legacy, Windows PowerShell è la scelta migliore. Ma per lo sviluppo cross-platform e i flussi di lavoro basati sul cloud, PowerShell Core è il più indicato.

Come verificare la versione di PowerShell

Conoscere la versione installata di PowerShell è importante per diversi motivi pratici, poiché la tua versione determina quali cmdlet e funzioni sono disponibili per l'uso. Diverse versioni possono offrire supporto variabile per diversi script, moduli e piattaforme. Per un funzionamento fluido di PowerShell, devi conoscere la versione di PowerShell che stai utilizzando, le sue limitazioni e le sue caratteristiche principali.

Verificare la versione di PowerShell è un compito semplice. Il modo più facile per controllare la versione di PowerShell è tramite lo stesso PowerShell. Puoi mostrare la versione di PowerShell che stai utilizzando, ad esempio, tramite il PSVersionTable.PSVersion o il cmdlet Get-Host.

Comando Versione PowerShell: $PSVersionTable.PSVersion

Questo è il metodo più affidabile per ottenere la versione del tuo PowerShell in quanto restituisce informazioni specifiche sulla versione del motore PowerShell.

      $PSVersionTable.PSVersion
      
Image

Questo cmdlet mostra la versione principale, secondaria e di build (patch) di PowerShell installato. Il numero di revisione viene visualizzato se applicabile.

Se vuoi visualizzare più dettagli oltre alla versione, prova il seguente cmdlet:

      $PSVersionTable
      
Image

$PSVersionTable mostra diverse proprietà specifiche dell'ambiente oltre alla versione.

  • PSVersion – Mostra la versione di PowerShell
  • PSEdition – Indica se è Desktop (Windows PowerShell) o Core (PowerShell Core / PowerShell 7+)
  • WSManStackVersion – Mostra la versione di WS-Management (utilizzato per il remoting)
  • PSRemotingProtocolVersion – Versione del protocollo di remoting
  • SerializationVersion – Utilizzato per mantenere la compatibilità con le versioni precedenti per le sessioni remote

Come ottenere la versione di PowerShell con il comando Get-Host

Un host è un programma che ospita il motore di PowerShell. E puoi avere un host con una versione indipendente da PowerShell.

Il seguente cmdlet mostra la versione di PowerShell che stai eseguendo, ma questa versione può essere inaccurata poiché riflette la versione dell'host, non del motore.

      Get-Host
      
Image

Spesso, la versione di PowerShell corrisponde a quella dell'host. Oltre alla versione dell'host, questo cmdlet mostra anche il nome dell'host, la cultura corrente e la cultura dell'interfaccia utente.

Il comando Get-Host non funziona in remoto e restituisce sempre la versione 1.0.0.0.

Comandi $Host e $Host.Version

$host è una variabile automatica che mostra le stesse informazioni del cmdlet Get-Host.

      $host
      
Image

Se stai cercando la versione di PowerShell, $host non è consigliato per gli stessi motivi di Get-Host. Lo stesso vale per $host.Version.

      $host.Version
      
Image

Mostra la versione dell'applicazione host che sta eseguendo l'attuale sessione di PowerShell, sebbene in un formato diverso.

Editor del Registro

Puoi verificare la versione di PowerShell tramite l'Editor del Registro in uno dei seguenti modi:

  • Utilizza il cmdlet Get-ItemProperty per interrogare il registro e verificare la versione di PowerShell installata.
  • Vai all'Editor del Registro di sistema e individua manualmente i percorsi per i dettagli della versione di PowerShell.

Via Cmdlets

Per la versione 5 di PowerShell

È possibile visualizzare la chiave di registro PowerShellVersion con il cmdlet 'Get-ItemProperty'. È come segue:

      (Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine -Name 'PowerShellVersion').PowerShellVersion
      
Image
Per la versione 7 di PowerShell

Se hai installato PowerShell 7 o versioni successive, utilizza il seguente cmdlet:

      Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\PowerShellCore' | Select-Object -Property PSVersion
      

Metodo manuale

Puoi ottenere la configurazione di PowerShell e le informazioni sulla versione nell'Editor del Registro.

Per la versione 5 di PowerShell

Nell'editor del Registro di sistema, espandi Computer > HKEY-LOCAL-MACHINE > SOFTWARE > Microsoft > PowerShell > 3 > PowerShellEngine. Nel riquadro adiacente, troverai informazioni che includono il numero di versione di PowerShell.

Image
Per la versione 7 di PowerShell

Se hai PowerShell 7 installato, vai al seguente percorso nell'Editor del Registro per controllare la versione:

Computer > HKEY_LOCAL_MACHINE > SOFTWARE > Microsoft > PowerShellCore > InstalledVersions > 31ab5147-9a97-4452-8443-d9709f0516e1

Tecniche avanzate per l'identificazione della versione

Trova la versione di PowerShell sui sistemi remoti

Prerequisiti

Prima di poter verificare la versione di PowerShell su una macchina remota, devono essere soddisfatti i seguenti prerequisiti.

  • Windows Management Framework (WMF) è installato e abilitato sulla macchina remota.
  • WinRM (Windows Remote Management) is configured and running on both the local and remote machines.
    Run ‘winrm quickconfig’ to prepare a machine to be remotely accessed via PowerShell.
  • Hai i permessi richiesti sulla macchina remota.

Verifica la versione di PowerShell su una macchina remota

Utilizza il cmdlet Invoke-Command con $PSVersionTable per verificare la versione di PowerShell installata su un computer remoto.

      Invoke-Command `
  -ComputerName WS16-DC1 `
  -ScriptBlock { $PSVersionTable.PSVersion } `
  -Credential $cred
      

Nota:

  1. In questo comando, sostituisci ComputerName (WS16-DC1) con il nome del tuo computer specifico e le credenziali sottostanti $cred con un nome utente e una password validi.
  2. Utilizzando le virgole per separare i valori, puoi gestire efficacemente più computer remoti contemporaneamente.

Nel cmdlet sopra:

  • Invoke-Command viene utilizzato per eseguire comandi su un computer remoto.
  • ComputerName WS16-DC1 specifica il nome del computer remoto (WS16-DC1 in questo caso).
  • ScriptBlock {$PSVersionTable.PSVersion} è il blocco di script che viene eseguito sul computer remoto per recuperare le informazioni sulla versione di PowerShell.
  • La credenziale $cred specifica le credenziali per autenticarsi sul computer remoto, dove $cred è un oggetto che contiene credenziali valide (come un nome utente e una password).

Confronto delle versioni di PowerShell tra i sistemi operativi Windows

Questa tabella elenca le versioni di PowerShell preinstallate con diversi sistemi operativi Windows:

Versione di PowerShell

Data di rilascio

Windows OS Supportato per Impostazione Predefinita

PowerShell 1.0

Novembre 2006

Windows Server 2003 SP1
Windows XP SP2
Windows Vista

PowerShell 2.0

Ottobre 2009

Windows Server 2008 R2
Windows 7

PowerShell 3.0

Settembre 2012

Windows Server 2012
Windows 8

PowerShell 4.0

Ottobre 2013

Windows Server 2012 R2
Windows 8.1

PowerShell 5.0

Febbraio 2016

Windows Server 2016
Windows 10

PowerShell 5.1

Agosto 2016

Windows Server 2016
Aggiornamento anniversario di Windows 10

PowerShell Core 6.0

Gennaio 2018

Windows Server 2012 R2
Windows Server 2012
Windows Server 2016
Windows 10
Windows 8.1
Windows 7 con Service Pack 1

Fonte: https://superops.com/powershell-version

PowerShell 5.1 è l'ultima versione installata di default sui client e server Windows. È stata superata da PowerShell Core (ora PowerShell 7), che è un prodotto separato. Non viene preinstallato ma deve essere installato manualmente.

Installare una versione più recente non sostituisce la versione preinstallata di default. Ad esempio, PowerShell 7.x e Windows PowerShell 5.1 possono coesistere.

Aggiornare o installare versioni più recenti di PowerShell

Per rimanere aggiornato su Windows PowerShell 5.1 in Windows 10 e 11, esegui sempre gli aggiornamenti di sistema per mantenere il tuo PC aggiornato.

PowerShell Core (versione 7) è un prodotto diverso da Windows PowerShell e deve essere installato manualmente tramite uno dei seguenti metodi:

  • Scarica ed esegui il file di installazione
  • Esegui un comando da PowerShell sul tuo computer

Come raccomandazione, mantieni sia Windows PowerShell che PowerShell Core sul tuo computer per sfruttare al meglio le potenzialità di PowerShell.

Tieni presente che gli script più vecchi potrebbero non funzionare nelle versioni più recenti, così come gli script attuali potrebbero non essere compatibili con le versioni precedenti.

Puoi scaricare e installare una versione più recente di PowerShell in uno di questi modi.

Installare PowerShell tramite Microsoft Store

In Windows 10 e Windows 11, apri il Microsoft Store e cerca PowerShell.

L’ultima versione dell’app PowerShell è elencata nei risultati di ricerca come PowerShell (pubblicata da Microsoft Corporation). Cliccaci sopra per visualizzare i dettagli e poi clicca su Ottieni per scaricarla e installarla.

Image

Installare PowerShell tramite Winget

Il gestore di pacchetti WinGet installa l’ultima versione di PowerShell dalla riga di comando.

Cercare PowerShell con Winget

Per visualizzare un elenco dei pacchetti relativi a PowerShell, con i loro numeri di versione e ID, usa il seguente cmdlet:

      winget search PowerShell
      
Image
Installare PowerShell

Trova il pacchetto PowerShell necessario e installalo utilizzando il suo ID. L’ID di PowerShell è Microsoft.PowerShell.
Per installare l’ultima versione di PowerShell, usa il seguente cmdlet:

      winget install Microsoft.PowerShell
      
Image

Installare PowerShell tramite pacchetto MSI


Un altro metodo consiste nello scaricare PowerShell da GitHub e utilizzare il file MSI per l’installazione. Visita la pagina ufficiale delle release di PowerShell su GitHub per individuare la versione più recente (ad esempio PowerShell 7.x). Scorri verso il basso fino alla sezione Assets della release e scarica il pacchetto MSI.

Il download potrebbe richiedere del tempo. Una volta completato, esegui l’installer per installare PowerShell.

Gestire più versioni di PowerShell

È possibile utilizzare la versione classica di Windows PowerShell (solitamente la 5.1) e la versione moderna PowerShell Core (6.x e 7.x) sulla stessa macchina senza conflitti.

Un caso comune in cui gestire più versioni è quando diversi ambienti o script richiedono versioni specifiche.

Ecco come gestire più versioni di PowerShell sul tuo sistema.

Eseguire una versione specifica dalla finestra Esegui o dalla riga di comando

Apri la finestra Esegui e specifica il percorso del file .exe della versione di PowerShell che vuoi avviare (vedi l’esempio sotto).

Puoi anche eseguire una versione specifica specificando il suo percorso all’interno di PowerShell, come mostrato nell’esempio seguente. Questo metodo è valido solo per PowerShell 7, dove è possibile passare da una versione all’altra.

Esempio:

  • PowerShell 5.1
      C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
      
  • PowerShell 7
      C:\Program Files\PowerShell\7\pwsh.exe
      

Profili e configurazione di PowerShell

Un profilo di PowerShell è uno script che viene eseguito ogni volta che avvii PowerShell, tranne quando usi il flag -NoProfile.

Ogni versione di PowerShell ha il proprio file di profilo. Se desideri che determinate impostazioni o configurazioni siano disponibili solo in una versione, puoi configurare i profili separatamente.Locate the profile file manually

  • PowerShell 5.1 profile might be at: C:\Users\<username>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
  • PowerShell 7+ profile might be at: C:\Users\<username>\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

Individuare il file del profilo tramite PowerShell

Puoi anche utilizzare PowerShell stesso per recuperare il percorso del profilo, tramite la variabile $Profile, che memorizza il percorso del file.

      $Profile
      
Image

Questo mostra il percorso del profilo dell’host PowerShell dell’utente corrente. Puoi anche passare la variabile $Profile al cmdlet Get-Member per ottenere ulteriori percorsi.

      $Profile | Get-Member -MemberType NoteProperty
      
Image

Testare la compatibilità con script e moduli precedenti

È importante testare la compatibilità con script e moduli più vecchi quando si aggiorna PowerShell o si integra codice legacy.

Ecco alcuni modi per farlo:

Usare Windows PowerShell e PowerShell Core contemporaneamente

Puoi eseguire entrambe le versioni sulla stessa macchina. Prova i tuoi script o moduli in entrambi gli ambienti per verificarne la compatibilità.
Ricorda che la versione 5.1 è l’ultima major release di Windows PowerShell, mentre la versione 7 è quella attuale di PowerShell Core.

Esempio:

      ./your_script.ps1
      

./ indica che lo script si trova nella directory corrente, mentre your_script.ps1 è lo script che vuoi eseguire.
L’estensione .ps1 è quella predefinita per i file di script PowerShell.

Verificare la versione di PowerShell

È utile sapere per quale versione di PowerShell è stato scritto lo script e in quale versione lo stai eseguendo.

Usare il cmdlet Test-ModuleManifest

Il cmdlet Test-ModuleManifest serve a verificare che un file manifesto di modulo PowerShell (.psd1) sia valido e configurato correttamente. Controlla anche le dipendenze e i problemi di compatibilità.

      Test-ModuleManifest -Path "C:\Path\To\YourModule.psd1"
      

Il parametro -Path specifica il percorso del file .psd1.

Usare Get-Command per verificare la disponibilità dei cmdlet

Alcuni cmdlet o parametri potrebbero essere supportati in una versione ma non in un’altra.
Usa Get-Command per verificare la disponibilità e la sintassi dei cmdlet in uso.

      Get-Command -Name Invoke-RestMethod -Module Microsoft.PowerShell.Utility
      

PSScriptAnalyzer per l’analisi statica del codice

PSScriptAnalyzer è uno strumento che verifica le best practice e identifica problemi di compatibilità.
Puoi installarlo ed eseguirlo con il seguente cmdlet:

      Install-Module -Name PSScriptAnalyzer
Invoke-ScriptAnalyzer -Path "C:\Path\To\YourScript.ps1"
      

È un ottimo modo per rilevare problemi nei tuoi script o cmdlet obsoleti prima dell’esecuzione.

Verificare la compatibilità con .NET

Windows PowerShell (5.1) si basa su .NET Framework, mentre PowerShell Core (6+) e PowerShell 7+ si basano su .NET Core/.NET.
Se il tuo script o modulo dipende da assembly .NET, assicurati che siano compatibili con entrambi gli ambienti.

Puoi testare gli assembly .NET utilizzati nel tuo script con il seguente cmdlet:

      [System.Reflection.Assembly]::LoadFile("C:\Path\To\YourAssembly.dll")
      

Conclusione

Conoscere la versione di PowerShell installata sul tuo computer è importante per diversi motivi. Ogni versione introduce nuovi cmdlet, funzionalità e sintassi, quindi conoscere la versione ti aiuta a garantire la compatibilità dei tuoi script.

PowerShell Core ha introdotto la compatibilità multipiattaforma, quindi sapere quale versione è installata è fondamentale per usare correttamente le funzioni e i moduli specifici di ciascuna piattaforma.

Tra tutti i metodi disponibili per determinare la versione di PowerShell, $PSVersionTable è il più consigliato: è il più affidabile e preciso. Fornisce una panoramica completa dell’ambiente PowerShell e ti aiuta ad assicurarti che gli script siano compatibili con la versione e l’ambiente corretti.

È essenziale aggiornare regolarmente PowerShell per installare le patch di sicurezza critiche e accedere alle funzionalità più recenti.
Gli aggiornamenti migliorano anche le prestazioni, le politiche di esecuzione e il supporto per l’esecuzione parallela e asincrona.

In sintesi, aggiornare PowerShell all’ultima versione ti consente di creare soluzioni di automazione più sicure, efficienti e scalabili, riducendo i rischi legati a versioni obsolete o non supportate.

Netwrix Directory Manager

FAQ

Come verificare la versione di PowerShell?

Il modo più semplice è tramite PowerShell stesso.
Puoi visualizzare la versione corrente usando ad esempio PSVersionTable.PSVersion oppure il cmdlet Get-Host.

Condividi su

Scopri di più

Informazioni sull'autore

Asset Not Found

Tyler Reese

Vicepresidente della Gestione Prodotti, CISSP

Con più di due decenni nel settore della sicurezza del software, Tyler Reese conosce intimamente le sfide di identità e sicurezza in rapida evoluzione che le aziende affrontano oggi. Attualmente, ricopre il ruolo di direttore del prodotto per il portfolio di Netwrix Identity and Access Management, dove le sue responsabilità includono la valutazione delle tendenze di mercato, la definizione della direzione per la linea di prodotti IAM e, in ultima analisi, la soddisfazione delle esigenze degli utenti finali. La sua esperienza professionale spazia dalla consulenza IAM per le aziende Fortune 500 al lavoro come architetto aziendale di una grande compagnia diretta al consumatore. Attualmente detiene la certificazione CISSP.