En PowerShell, hay un trillón de formas de hacer lo mismo (o casi). En esta publicación de blog, aprenderá todas las formas de verificar la versión de PowerShell que tiene en computadoras locales y remotas. Cubriremos las malas formas y la forma recomendada.
Si desea pasar de ser un novato de PowerShell a un gurú de PowerShell, le recomiendo devorar este GRATIS minicurso sobre la creación de una herramienta PowerShell. ¡Este es un tutorial paso a paso con explicaciones completas y orientación de Adam the Automator!
Hay sitios web que muestran varias formas de verificar la versión de Powershell. Pero ninguno que compilara una lista completa de todos ellos. Decidí cambiar eso.
Todas estas formas deberían funcionar tanto en Windows PowerShell como en PowerShell Core. Estos métodos también deberían funcionar en las versiones 1.0 de Windows PowerShell hasta PowerShell 7.
Las formas en que puede encontrar una versión de PowerShell que está ejecutando son:
- La
(Get-Host).Version
propiedad - La
$host.Version
propiedad - El registro (solo Windows PowerShell)
- La
$PSVersionTable.PSVersion
propiedad
Analicemos todas las formas de encontrar la versión de PowerShell de la menos a la más recomendada. .
Tabla de contenido
Get-Host
PowerShell tiene un concepto conocido como hosts. Un host es un programa que aloja el motor PowerShell. No es el motor de PowerShell en sí. La consola de PowerShell o un editor de código con un terminal integrado son hosts de PowerShell.
Un host puede tener una versión que sea completamente independiente de PowerShell. Esto puede engañar a muchos recién llegados. Déjame mostrarte por qué.
Si ejecutas (Get-Host).Version
, verás que devuelve un número de versión que parece que podría ser la versión del motor PowerShell. Las apariencias engañan.
A continuación, he ejecutado Get-Host
en Windows PowerShell 5.1 y puede ver que vuelve con 5.1.17134.858. Esta parece una versión legítima.
Sin embargo, a veces, cuando ejecuta Get-Host
en una terminal integrada, el la versión no es la misma. Aunque normalmente el host representará la misma versión del motor, no siempre es necesario hacerlo.
Verifique la versión de Powershell a través de Get-Host en computadoras remotas
Aunque Get-Host
parece devolver la misma versión cuando se ejecuta en una computadora local, nunca lo hará en computadoras remotas.
Por ejemplo, ejecutemos Get-Host
en un servidor remoto de Windows Server 2016 a través de Invoke-Command
y vea qué sucede.
La última vez que verifiqué, no es posible ejecutar PowerShell v1 en Windows Server 2016.
Depender de Get-Host
es simplemente una mala idea.
Verifique la versión de Powershell $ host.Version command
Hacer referencia a $host.Version
es otra forma de verificar la versión de Powershell. La variable $host
es una variable automática que devuelve el mismo resultado que Get-Host
.
No hay nada especial en este método. Es simplemente lo mismo que ejecutar Get-Host
.
$ host.Version en equipos remotos
Verá el mismo comportamiento a través de PowerShell Remoting con $host.Version
como ejecutará Get-Host
.
¡Peligro, Will Robinson!
Registro
Si no desea abrir PowerShell, también puede verificar el registro. La versión de PowerShell está escondida bajo un valor en la ruta de la clave de registro HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine
. Esta clave de registro tiene un valor llamado PowerShellVersion
al que puede hacer referencia usando Get-ItemProperty
.
Puede ver que esto La versión es similar pero no incluye la revisión como lo hacen las otras opciones.
Uso de otras herramientas
El uso del registro también significa que no necesita usar PowerShell en absoluto para encontrar la versión. Puede ejecutar comandos desde el símbolo del sistema u otra herramienta que pueda leer el registro.
Registro en equipos remotos
El registro es estático y los valores no cambiarán de forma local o remota. Puede estar seguro de que lo que ve localmente será lo mismo que ve de forma remota.
Mostrar la misma versión local y remotamente es bueno. Pero tengo una mejor manera de mostrarte el uso de la $PSVersionTable
variable automática.
Verifica la versión de Powershell a través del comando $ PSVersionTable.PSVersion
El último y último método es hacer referencia a la propiedad PSVersion
en la $PSVersionTable
variable automática.Este método siempre representará el motor PowerShell.
La $PSVersionTable
variable automática es una tabla hash de solo lectura que devuelve información específicamente sobre la versión del motor de PowerShell. Esta variable automática no solo devuelve la versión sino también PSEdition
. Esta propiedad puede ser Core o Desktop para proporcionar más información sobre la edición de PowerShell que se está ejecutando.
$ PSVersionTable en computadoras remotas
Usando el $PSVersionTable
variable automática es precisa tanto localmente como remotamente. Puede ver a continuación que si envuelve $PSVersionTable.PSVersion
en un scriptblock y ejecuta ese código en una computadora remota, devolverá la misma versión.
Resumen
En esta publicación de blog, ha aprendido todas las formas de verificar la versión de PowerShell tanto de forma local como remota. ¡Espero que los primeros métodos le hayan dado una idea de las formas de no verificar la versión!
Recomiendo usar siempre $PSVersionTable.PSVersion
. Todos los demás métodos pueden parecer similares a la versión del motor PowerShell, pero es posible que no siempre reflejen la versión del motor.