No PowerShell, existem zilhões de maneiras de fazer a mesma coisa (ou algo semelhante). Neste post do blog, você aprenderá todas as maneiras de verificar a versão do PowerShell que você tem em computadores locais e remotos. Vamos abordar as maneiras ruins e a minha maneira recomendada.
Existem sites que mostram várias maneiras de verificar a versão do seu Powershell. Mas nenhum compilou uma lista abrangente de todas elas. Decidi mudar isso.
Todas essas maneiras devem funcionar tanto no Windows PowerShell quanto no PowerShell Core. Esses métodos também devem funcionar nas versões do Windows PowerShell de 1.0 até o PowerShell 7.
As maneiras de descobrir a versão do PowerShell que você está executando são:
- A propriedade
(Get-Host).Version
- A propriedade
$host.Version
- O registro (apenas no Windows PowerShell)
- A propriedade
$PSVersionTable.PSVersion
Vamos detalhar todas as maneiras de encontrar a versão do PowerShell da menos recomendada para a mais recomendada.
Get-Host
O PowerShell tem um conceito conhecido como hosts. Um host é um programa que está hospedando a engine do PowerShell. Não é a própria engine do PowerShell. O console do PowerShell ou um editor de código com um terminal integrado são hosts do 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 você executar (Get-Host).Version
, verá que ele retorna um número de versão que parece ser a versão do motor PowerShell. As aparências podem ser enganosas.
Abaixo, executei Get-Host
no Windows PowerShell 5.1 e você pode ver que retorna 5.1.17134.858. Isso parece ser uma versão legítima.
No entanto, às vezes, ao executar Get-Host
em um terminal integrado, a versão não é a mesma. Embora geralmente o host represente a mesma versão do motor, não necessariamente sempre acontece assim.
Verifique a versão do PowerShell via Get-Host em computadores remotos
Mesmo que Get-Host
pareça retornar a mesma versão ao ser executado em um computador local, nunca será o mesmo em computadores remotos.
Por exemplo, vamos executar Get-Host
em um servidor remoto do Windows Server 2016 via Invoke-Command
e ver o que acontece.
Na última vez que verifiquei, não era possível executar o PowerShell v1 no Windows Server 2016.
Depender de Get-Host
é apenas uma má ideia em todos os aspectos.
Verifique a versão do PowerShell usando o comando $host.Version
Fazer referência a $host.Version
é outra maneira de verificar a versão do PowerShell. A variável $host
é uma variável automática que retorna a mesma saída que Get-Host
.

$host.Version
Não há nada de especial neste método. É simplesmente o mesmo que executar Get-Host
.
$host.Version em Computadores Remotos
Você verá o mesmo comportamento via PowerShell Remoting com $host.Version
como veria executando Get-Host
.
Cuidado, Will Robinson!
Registro
Se você não quiser abrir o próprio PowerShell, também pode verificar o registro. A versão do PowerShell está armazenada em um valor no caminho do registro HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine
. Esta chave do registro tem um valor chamado PowerShellVersion
que você pode consultar usando Get-ItemProperty
.
Você pode ver que esta versão é semelhante, mas não inclui a revisão como as outras opções fazem.
Usando Outras Ferramentas
O uso do registro também significa que você não precisa usar o PowerShell para encontrar a versão. Você pode executar comandos a partir do prompt de comando ou de outra ferramenta que possa ler o registro.
Registro em Computadores Remotos
O registro é estático e os valores não mudarão localmente ou remotamente. Você pode ter confiança de que o que você vê localmente será o mesmo que você vê remotamente.
Mostrar a mesma versão local e remotamente é bom. Mas tenho uma maneira melhor de mostrar usando a variável automática $PSVersionTable
.
Verificar a versão do PowerShell via comando $PSVersionTable.PSVersion
O último e método final é fazer referência à propriedade PSVersion
na variável automática $PSVersionTable
. Este método sempre representará o mecanismo do PowerShell.
A variável automática $PSVersionTable
é uma tabela hash somente leitura que retorna informações especificamente sobre a versão do mecanismo do PowerShell. Esta variável automática não apenas retorna a versão, mas também a PSEdition. Esta propriedade pode ser Core ou Desktop para fornecer informações adicionais sobre a edição do PowerShell que está em execução.

$PSVersionTable em Computadores Remotos
O uso da variável automática $PSVersionTable
é preciso tanto localmente quanto remotamente. Você pode ver abaixo que envolvendo $PSVersionTable.PSVersion
em um scriptblock e executando esse código em um computador remoto, ele retornará a mesma versão.
Resumo
Neste post do blog, você aprendeu todas as maneiras de verificar a versão do PowerShell tanto localmente quanto remotamente. Espero que os primeiros métodos tenham lhe dado uma ideia de quais maneiras não verificar a versão!
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 eu perdi alguma maneira, por favor me avise nos comentários. Ficarei feliz em atualizar o post e lhe dar crédito.