In PowerShell, ci sono uninfinità di modi per fare la stessa cosa (o avvicinarsi ad essa). In questo post del blog imparerai come controllare la versione di PowerShell che hai sui computer locali e remoti. Tratteremo i modi sbagliati e il mio modo consigliato.
Se desideri passare da principiante di PowerShell a guru di PowerShell, ti consiglio di divorarlo GRATIS mini-corso sulla creazione di uno strumento PowerShell. Questo è un tutorial passo passo con spiegazioni complete e guida di Adam the Automator!
Ci sono siti web che mostrano vari modi per controllare la versione di Powershell. Ma nessuno che abbia compilato un elenco completo di tutti loro. Ho deciso di cambiarlo.
Tutti questi modi dovrebbero funzionare sia in Windows PowerShell che in PowerShell Core. Questi metodi dovrebbero funzionare anche nelle versioni di Windows PowerShell 1.0 fino a PowerShell 7.
I modi per scoprire una versione di PowerShell in esecuzione sono:
- La
(Get-Host).Version
proprietà - La
$host.Version
proprietà - Il registro (solo Windows PowerShell)
- La
$PSVersionTable.PSVersion
proprietà
Analizziamo tutti i modi per trovare la versione di PowerShell dalla meno alla più consigliata .
Sommario
Get-Host
PowerShell ha un concetto noto come host. Un host è un programma che ospita il motore di PowerShell. Non è il motore di PowerShell stesso. La console di PowerShell o un editor di codice con un terminale integrato sono host di PowerShell.
Un host può avere una versione completamente indipendente da PowerShell stesso. Questo può essere ingannevole per molti nuovi arrivati. Lascia che ti mostri il motivo.
Se esegui (Get-Host).Version
, vedrai che restituisce un numero di versione che sembra potrebbe essere la versione del motore PowerShell. Lapparenza può ingannare.
Di seguito ho eseguito Get-Host
su Windows PowerShell 5.1 e puoi vedere che torna con 5.1.17134.858. Sembra una versione legittima.
Tuttavia, a volte, quando esegui Get-Host
in un terminale integrato, il la versione non è la stessa. Sebbene di solito lhost rappresenti la stessa versione del motore, non è sempre necessario farlo.
Controlla la versione di Powershell tramite Get-Host su computer remoti
Anche se Get-Host
sembra restituire la stessa versione se eseguito su un computer locale, non lo farà mai su computer remoti.
Ad esempio, eseguiamo Get-Host
su un server Windows Server 2016 remoto tramite Invoke-Command
e guarda cosa succede.
Lultima volta che ho controllato, non è possibile eseguire PowerShell v1 su Windows Server 2016.
Affidarsi a Get-Host
è solo una cattiva idea.
Controlla la versione di Powershell $ host.Version command
Fare riferimento a $host.Version
è un altro modo per controllare la versione di Powershell. La variabile $host
è una variabile automatica che restituisce lo stesso output di Get-Host
.
Non cè niente di speciale in questo metodo. È semplicemente uguale a Get-Host
.
$ host.Version su computer remoti
Vedrai lo stesso comportamento tramite PowerShell Remoting con $host.Version
poiché eseguirai Get-Host
.
Pericolo, Will Robinson!
Registry
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 utilizzando Get-ItemProperty
.
Puoi vedere che questo è simile ma non include la revisione come fanno le altre opzioni.
Uso di altri strumenti
Luso del registro significa anche che non è necessario utilizzare PowerShell per trovare la versione. Puoi eseguire comandi dal prompt dei comandi o da un altro strumento in grado di leggere il registro.
Registro di sistema su computer remoti
Il registro è statico e i valori non cambieranno localmente o in remoto. Puoi essere certo che ciò che vedi localmente sarà lo stesso che vedi in remoto.
Mostrare la stessa versione in locale e in remoto è una buona cosa. Ma ho un modo migliore per mostrarti come utilizzare la $PSVersionTable
variabile automatica.
Controlla la versione di Powershell tramite il comando $ PSVersionTable.PSVersion
Lultimo e ultimo metodo fa riferimento alla proprietà PSVersion
sulla variabile automatica $PSVersionTable
.Questo metodo rappresenterà sempre il motore di PowerShell.
La variabile automatica $PSVersionTable
è una tabella hash di sola lettura che restituisce informazioni specifiche sulla versione del motore PowerShell. Questa variabile automatica non solo restituisce la versione ma anche PSEdition
. Questa proprietà può essere Core o Desktop per fornire ulteriori informazioni sulledizione di PowerShell in esecuzione.
$ PSVersionTable su computer remoti
Utilizzo di $PSVersionTable
la variabile automatica è precisa sia a livello locale che in remoto. Di seguito puoi vedere che avvolgendo $PSVersionTable.PSVersion
in uno scriptblock 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 in locale che in remoto. Spero che i primi metodi ti abbiano dato unidea su quali modi non controllare la versione!
Raccomando sempre di usare $PSVersionTable.PSVersion
. Tutti gli altri metodi potrebbero sembrare simili alla versione del motore PowerShell, ma potrebbero non riflettere sempre la versione del motore.