Come controllare la versione di PowerShell installata?
In questo articolo impareremo quali versioni di PowerShell esistono, qual è la differenza tra Windows PowerShell
e PowerShell Core
e come controllare la versione di PowerShell installata su un computer locale o remoto.
Cronologia e versioni di Windows PowerShell e PowerShell Core
PowerShell è installato per impostazione predefinita in tutte le versioni di Windows a partire da Windows 7 SP1 e Windows Server 2008 R2 SP1. La tabella seguente mostra l’elenco di tutte le versioni di PowerShell:
PS Version | Nota |
PowerShell 1.0 | Può essere installato manualmente su Windows Server 2003 SP1 e Windows XP |
PowerShell 2.0 | Windows Server 2008 R2 e Windows 7 |
PowerShell 3.0 | Windows 8 e Windows Server 2012 |
PowerShell 4.0 | Windows 8.1 e Windows Server 2012 R2 |
PowerShell 5.0 | Preinstallato su Windows 10 RTM e aggiornato automaticamente a 5.1 tramite Windows Update |
PowerShell 5.1 | È integrato in Windows 10 (a partire dalla Build 1709) e Windows Server 2016 |
PowerShell Core 6.0 e 6.1 | È la prossima versione multipiattaforma di PowerShell (basata su .NET Core) che può essere installata su tutte le versioni di Windows supportate e su MacOS, CentOS, RHEL, Debian, Ubuntu, openSUSE |
PowerShell Core 7.0 | È l’ultima versione di PowerShell rilasciata a marzo 2020 (.NET Core 3.1 è utilizzato al posto di .NET Core 2.x) |
Vale la pena notare che negli ultimi 2 anni Microsoft ha sospeso lo sviluppo del classico Windows PowerShell (vengono rilasciate solo correzioni di bug e aggiornamenti di sicurezza) e si è concentrata su PowerShell Core multipiattaforma open source.
Qual è la differenza tra Windows PowerShell e PowerShell Core?
- Windows PowerShell è basato su .NET Framework (ad esempio, PowerShell 5 richiede .NET Framework v4.5, assicurarsi che è installato). PowerShell Core è basato su .Net Core;
- Windows PowerShell funziona solo nei sistemi operativi Windows, mentre PowerShell Core è multipiattaforma e può funzionare anche in Linux;
- PowerShell Core è non completamente compatibile con Windows PowerShell, tuttavia, Microsoft sta lavorando per migliorare la compatibilità con le versioni precedenti di cmdlet e script PS precedenti. (si consiglia di testare i vecchi script PS1 prima di passare a PowerShell Core). PowerShell Core 7 offre la massima compatibilità con Windows PowerShell;
- Non è possibile utilizzare PowerShell ISE Editor per modificare gli script PowerShell Core (ma è possibile utilizzare Visual Studio Code);
- Poiché Windows PowerShell non è più sviluppato, si consiglia di avviare la migrazione a PowerShell Core.
Come ottenere la versione di PowerShell dalla console?
Il modo più semplice per scoprire quale La versione di PowerShell installata sul tuo computer è utilizzare il comando:
host
Controlla il valore della proprietà Version.
o
$PSVersionTable
Puoi ottenere solo il valore della versione di PowerShell :
$PSVersionTable.PSVersion.major
(in questo esempio abbiamo PSVersion 2.0 in clean Win dows Server 2008 R2)
Il comando $ PSVersionTable funziona correttamente in PowerShell Core in diversi sistemi operativi.
È inoltre possibile scoprire la versione di PowerShell installata tramite il registro. A tal fine, ottenere il valore del parametro PowerShellVersion nella chiave di registro HKLM\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine
utilizzando il cmdlet Get-ItemProperty:
In Windows Server 2008 R2 / Windows 7, puoi ottenere il valore del parametro del registro in un’altra chiave di registro:
(Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine -Name "PowerShellVersion").PowerShellVersion
Per ottenere la versione PowerShell Core installata, utilizzare il seguente comando:
Controlla la versione di PowerShell su computer remoti
A controllare la versione di PowerShell su un host remoto, utilizzare il valore della variabile di ambiente $ PSVersionTable o ottenere le informazioni direttamente dal registro. Altri metodi possono restituire dati errati.
È possibile ottenere la versione di PowerShell installata su un computer remoto tramite PowerShell Remoting utilizzando il cmdlet Invoke-Command: