No PowerShell, existem zilhões de maneiras de fazer a mesma coisa (ou quase isso). Nesta postagem do blog, você aprenderá todas as maneiras de verificar a versão do PowerShell existente em computadores locais e remotos. Abordaremos os métodos ruins e meu método recomendado.
Se você gostaria de passar de novato do PowerShell a guru do PowerShell, recomendo devorar isso GRÁTIS mini-curso sobre a construção de uma ferramenta PowerShell. Este é um tutorial passo a passo com explicações completas e orientações de Adam, o Automator!
Existem sites que mostram várias maneiras de verificar a versão do Powershell. Mas nenhum que compilou uma lista abrangente de todos eles. Decidi mudar isso.
Todas essas maneiras devem funcionar no Windows PowerShell e no PowerShell Core. Esses métodos também devem funcionar no Windows PowerShell versões 1.0 até o PowerShell 7.
As maneiras de descobrir uma versão do PowerShell que está executando são:
- A
(Get-Host).Version
propriedade - A
$host.Version
propriedade - O registro (somente Windows PowerShell)
- A
$PSVersionTable.PSVersion
propriedade
Vamos analisar todas as maneiras de encontrar a versão do PowerShell, do menos ao mais recomendado .
Índice
Get-Host
O PowerShell tem um conceito conhecido como hosts. Um host é um programa que hospeda o mecanismo PowerShell. Não é o motor do PowerShell em si. O console do PowerShell ou um editor de código com um terminal integrado são hosts do PowerShell.
Um host pode ter uma versão que é completamente independente do próprio PowerShell. Isso pode enganar muitos recém-chegados. Deixe-me mostrar por quê.
Se você executar (Get-Host).Version
, verá que ele retorna um número de versão que parece ser a versão do mecanismo do PowerShell. As aparências enganam.
Abaixo, executei Get-Host
no Windows PowerShell 5.1 e você pode ver que ele volta com 5.1.17134.858. Parece uma versão legítima.
No entanto, às vezes, quando você executa Get-Host
em um terminal integrado, o versão não é a mesma. Embora normalmente o host represente a mesma versão do mecanismo, nem sempre é necessário fazer isso.
Verifique a versão do PowerShell via Get-Host em computadores remotos
Mesmo que Get-Host
parece retornar a mesma versão quando executado em um computador local, mas nunca retornará em computadores remotos.
Por exemplo, vamos executar Get-Host
em um servidor Windows Server 2016 remoto via Invoke-Command
e veja o que acontece.
A última vez que verifiquei, não é possível executar o PowerShell v1 no Windows Server 2016.
Contar com Get-Host
é apenas uma péssima ideia.
Verifique o comando Powershell versão $ 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
.
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 por meio do PowerShell Remoting com $host.Version
conforme você executará Get-Host
.
Perigo, Will Robinson!
Registro
Se você não deseja abrir o PowerShell propriamente dito, também pode verificar o registro. A versão do PowerShell está escondida sob um valor no caminho da chave de registro HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine
. Esta chave de registro tem um valor chamado PowerShellVersion
, que você pode fazer referência usando Get-ItemProperty
.
Você pode ver que isto versão é semelhante, mas não inclui a revisão como as outras opções fazem.
Usando outras ferramentas
Usar o registro também significa que você não precisa usar o PowerShell para encontrar a versão. Você pode executar comandos 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 mudam local ou remotamente. Você pode ter certeza de que o que você vê localmente é o mesmo que vê remotamente.
Mostrar a mesma versão local e remotamente é bom. Mas eu tenho uma maneira melhor de mostrar a você usando a $PSVersionTable
variável automática.
Verifique a versão do PowerShell por meio do comando $ PSVersionTable.PSVersion
O último e último método faz referência à propriedade PSVersion
na $PSVersionTable
variável automática.Este método sempre representará o mecanismo PowerShell.
A $PSVersionTable
variável automática é uma tabela de hash somente leitura que retorna informações especificamente sobre a versão do motor do PowerShell. Esta variável automática não retorna apenas a versão, mas também PSEdition
. Esta propriedade pode ser Core ou Desktop para fornecer mais informações sobre a edição do PowerShell em execução.
$ PSVersionTable em computadores remotos
Usando o $PSVersionTable
a variável automática é precisa 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
Nesta postagem do blog, você aprendeu todas as maneiras de verificar a versão do PowerShell local e remotamente. Espero que os primeiros métodos tenham dado a você uma idéia de como não verificar a versão!
Eu recomendo sempre usar $PSVersionTable.PSVersion
. Todos os outros métodos podem parecer semelhantes à versão do mecanismo do PowerShell, mas nem sempre refletem a versão do mecanismo.