In PowerShell, ci sono un miliardo di modi per fare la stessa cosa (o qualcosa di simile). In questo post sul blog, imparerai tutti i modi per controllare la versione di PowerShell che hai sui computer locali e remoti. Copriremo i modi sbagliati e il mio modo consigliato.
Ci sono siti web che mostrano vari modi per controllare la versione di Powershell. Ma nessuno ha compilato un elenco completo di tutti loro. Ho deciso di cambiare questo stato di cose.
Tutti questi metodi dovrebbero funzionare sia in Windows PowerShell che in PowerShell Core. Questi metodi dovrebbero funzionare anche nelle versioni di Windows PowerShell da 1.0 fino a PowerShell 7.
I modi per scoprire la versione di PowerShell che stai utilizzando sono:
- La proprietà
(Get-Host).Version
- La proprietà
$host.Version
- Il registro (solo Windows PowerShell)
- La proprietà
$PSVersionTable.PSVersion
Analizziamo tutti i modi per trovare la versione di PowerShell dal meno al più consigliato.
Get-Host
PowerShell ha un concetto noto come hosts. Un host è un programma che sta ospitando il motore PowerShell. Non è il motore PowerShell stesso. La console di PowerShell o un editor di codice con un terminale integrato sono hosts di PowerShell.
A host can have a version that is completely independent of PowerShell itself. This can be deceiving to many newcomers. Let me show you why.
Se esegui (Get-Host).Version
, vedrai che restituisce un numero di versione che sembra poter essere la versione del motore di PowerShell. Le apparenze ingannano.
Qui sotto ho eseguito Get-Host
su Windows PowerShell 5.1 e puoi vedere che ritorna 5.1.17134.858. Questo sembra una versione legittima.
Tuttavia, a volte quando esegui Get-Host
in un terminale integrato, la versione non è la stessa. Anche se di solito, l’host rappresenta la stessa versione del motore, non è sempre così.
Verifica la versione di Powershell tramite Get-Host su computer remoti
Anche se Get-Host
sembra restituire la stessa versione quando viene eseguito su un computer locale, non lo farà mai su computer remoti.
Ad esempio, eseguiamo Get-Host
su un server remoto Windows Server 2016 tramite Invoke-Command
e vediamo cosa succede.
L’ultima volta che ho controllato, non è possibile eseguire PowerShell v1 su Windows Server 2016.
Fidarsi di Get-Host
è semplicemente una brutta idea in generale.
Verifica la versione di Powershell con il comando $host.Version
Riferirsi a $host.Version
è un altro modo per verificare la versione di Powershell. La variabile $host
è una variabile automatica che restituisce lo stesso output di Get-Host
.

$host.Version
Non c’è niente di speciale riguardo questo metodo. È semplicemente lo stesso di eseguire Get-Host
.
$host.Version su computer remoti
Vedrai lo stesso comportamento tramite PowerShell Remoting con $host.Version
come eseguire Get-Host
.
Pericolo, Will Robinson!
Registro
Se non vuoi aprire PowerShell stesso, puoi anche controllare il registro. La versione di PowerShell è nascosta sotto un valore nel percorso della chiave di registro HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine
. Questa chiave di registro ha un valore chiamato PowerShellVersion
a cui puoi fare riferimento usando Get-ItemProperty
.
Puoi vedere che questa versione è simile ma non include la revisione come fanno le altre opzioni.
Utilizzo di Altri Strumenti
Utilizzare il registro significa anche che non è necessario utilizzare PowerShell affatto per trovare la versione. Puoi eseguire comandi dall’indicatore dei comandi o da un altro strumento che può leggere il registro.
Registro su Computer Remoti
Il registro è statico e i valori non cambieranno localmente o remotamente. Puoi essere certo che ciò che vedi localmente sarà lo stesso che vedi remotamente.
Mostrare la stessa versione localmente e remotamente è buono. Ma ho un modo migliore per mostrarti usando la variabile automatica $PSVersionTable
.
Controlla la Versione di Powershell tramite il comando $PSVersionTable.PSVersion
Il metodo ultimo e finale consiste nel fare riferimento alla proprietà PSVersion
sulla variabile automatica $PSVersionTable
. Questo metodo rappresenterà sempre il motore PowerShell.
La variabile automatica $PSVersionTable
è una tabella hash di sola lettura che restituisce informazioni specifiche sulla versione del motore PowerShell. Questa variabile automatica restituisce non solo la versione, ma anche PSEdition. Questa proprietà può essere Core o Desktop per fornire ulteriori informazioni sull’edizione di PowerShell in esecuzione.

$PSVersionTable su computer remoti
Utilizzare la variabile automatica $PSVersionTable
è accurato sia localmente che in remoto. Come puoi vedere di seguito, avvolgendo $PSVersionTable.PSVersion
in un blocco script ed eseguendo quel codice su un computer remoto, restituirà la stessa versione.
Riepilogo
In questo post del blog, hai imparato tutti i modi per controllare la versione di PowerShell sia localmente che in remoto. Spero che i primi metodi ti abbiano dato un’idea di quali modi non utilizzare per controllare la versione!
I recommend always using $PSVersionTable.PSVersion
. All of the other methods may appear similar to the PowerShell engine version but may not always reflect the engine version.
Se ho trascurato qualche metodo, per favore fammelo sapere nei commenti. Sarò lieto di aggiornare il post e darti credito.