Comprobar la versión instalada de PowerShell evita errores tontos y ahorra tiempo cuando un script funciona en un equipo y falla en otro. En Windows, la confusión más común es mezclar Windows PowerShell 5.1 con PowerShell 7.x, porque conviven en paralelo y no siempre se abren desde el mismo acceso directo. Aquí te explico cómo ver la versión real que está ejecutándose, cómo interpretar la salida y qué revisar si el resultado no coincide con lo que esperabas.
La forma más fiable de ver qué PowerShell estás ejecutando ahora mismo
-
$PSVersionTable.PSVersionte dice la versión del motor que está activa en esa sesión. -
$PSVersionTableañade la edición, el sistema y otros datos útiles para diagnosticar compatibilidad. -
pwsh -vconfirma la versión del ejecutable de PowerShell 7 sin abrir una sesión completa. -
powershell.exeypwsh.exeno son lo mismo, y en Windows pueden coexistir. -
PSEditionte ayuda a distinguir entre Desktop y Core, que no siempre aceptan los mismos módulos.
Cómo comprobar la versión en segundos
Yo empiezo siempre por $PSVersionTable.PSVersion, porque me devuelve la versión del motor que realmente está corriendo en esa sesión, no la que creo haber abierto. Es la comprobación más directa y la más útil cuando quiero salir de dudas en menos de un minuto.
$PSVersionTable.PSVersion
pwsh -vLa primera orden funciona dentro de PowerShell y te muestra un número desglosado en Major, Minor, Build y Revision. La segunda sirve para comprobar desde consola, una tarea o un acceso directo qué versión de pwsh está instalada. Si quiero una vista más completa, escribo $PSVersionTable y miro también PSEdition, porque ahí aparece una pista clave sobre compatibilidad.
| Método | Qué muestra | Cuándo lo prefiero |
|---|---|---|
$PSVersionTable.PSVersion |
La versión del motor que está activa en la sesión actual | Cuando necesito la respuesta real, no una suposición |
$PSVersionTable |
Versión, edición y datos de compatibilidad | Cuando estoy depurando módulos o diferencias de entorno |
pwsh -v |
La versión del ejecutable de PowerShell 7 | Cuando quiero comprobar la instalación sin entrar en la sesión |
Con eso ya tienes la medición básica. El siguiente paso es entender qué significa realmente esa salida, porque ahí es donde suele empezar la confusión.
Qué significa la salida y por qué importa
La parte importante no es solo el número principal. En PowerShell, el dato que te interesa de verdad suele estar en dos sitios: la versión del motor y la edición. La versión te dice qué rama estás usando; la edición te aclara si estás en el mundo clásico de Windows PowerShell o en la línea moderna de PowerShell 7.
| Campo | Qué indica | Cómo lo leo yo |
|---|---|---|
PSVersion |
La versión exacta del motor | Si veo 5.1, estoy en Windows PowerShell; si veo 7.x, estoy en PowerShell moderno |
PSEdition |
La edición del entorno | Desktop suele asociarse a Windows PowerShell; Core a PowerShell 6+ y 7+ |
Build y Revision
|
Parche y compilación | Me sirven para afinar diagnóstico, sobre todo si sospecho un fallo corregido en una actualización |
PSCompatibleVersions |
Versiones compatibles | Lo consulto cuando un módulo o script se comporta de forma extraña entre equipos |
La propia documentación de PowerShell deja claro que $PSVersionTable describe la sesión actual, así que no conviene interpretar ese resultado como si fuera una ficha genérica del sistema. En la práctica, eso me recuerda una regla simple: la versión correcta no es la instalada en abstracto, sino la que está ejecutando el script en ese momento.
Con ese criterio en mente, la diferencia entre Windows PowerShell y PowerShell 7 deja de ser teórica y se vuelve operativa.
Windows PowerShell 5.1 y PowerShell 7 conviven, pero no hacen lo mismo
En Windows es habitual tener ambas líneas instaladas. Microsoft lo plantea así: PowerShell 7 no reemplaza a Windows PowerShell 5.1, sino que se instala aparte y puede convivir con él. Eso explica por qué una misma máquina puede abrir dos consolas distintas y dar dos respuestas diferentes al mismo comando.
| Entorno | Binario | Lo que suele mostrar | Riesgo típico |
|---|---|---|---|
| Windows PowerShell 5.1 | powershell.exe |
PSEdition = Desktop |
Creer que estás en la versión nueva cuando en realidad sigues en la clásica |
| PowerShell 7.x | pwsh.exe |
PSEdition = Core |
Dar por hecho que todos los módulos antiguos funcionarán igual |
Yo suelo mirar antes el nombre del ejecutable que el número, porque eso me dice qué ecosistema tengo delante. Si el comando es powershell.exe, sigo en la rama 5.1; si es pwsh.exe, estoy en PowerShell 7. Esa diferencia parece pequeña, pero cambia módulos disponibles, compatibilidad y comportamiento en varias tareas de automatización.
Y precisamente por eso conviene ajustar bien los scripts, sobre todo cuando no los vas a lanzar manualmente.
Cómo evitar confusiones en scripts y tareas automatizadas
En scripts y tareas programadas no me fío del acceso directo ni del icono. Si necesito una versión concreta, llamo al ejecutable correcto de forma explícita y, cuando el script depende de una rama mínima, lo declaro desde el principio.
#Requires -Version 6.0
#Requires -PSEdition CoreEse bloque hace algo muy útil: detiene la ejecución antes de que el script entre en terreno peligroso. Si alguien intenta lanzarlo en una sesión demasiado antigua o en la edición equivocada, el fallo aparece de inmediato y no a mitad del proceso.
En tareas programadas o en CI/CD, yo prefiero escribir la ruta o el comando exacto que quiero usar. Si el flujo necesita PowerShell 7, llamo a pwsh.exe; si el módulo exige Windows PowerShell 5.1, asumo esa limitación y la documento. Lo que no hago es dejar que el sistema decida por mí, porque ahí nacen los errores más difíciles de reproducir.
Con eso cubres la parte preventiva. Falta la parte incómoda: qué revisar cuando el número que ves no encaja con lo que esperabas.
Qué revisar si la versión no coincide con lo que esperabas
Cuando la versión “sale mal”, casi siempre el problema está en qué shell has abierto, no en la instalación. Yo reviso primero esto, en este orden: el ejecutable, el acceso directo y la compatibilidad del módulo o del script.
| Síntoma | Causa probable | Qué haría yo |
|---|---|---|
$PSVersionTable.PSVersion muestra 5.1 aunque instalé PowerShell 7 |
Has abierto powershell.exe en lugar de pwsh.exe
|
Lanzaría pwsh de forma explícita y volvería a comprobar la versión |
| Un script funciona en consola, pero falla en una tarea programada | La tarea usa otra ruta o una sesión no interactiva | Fijaría el ejecutable completo y probaría con la misma cuenta y contexto |
| Un módulo carga en 5.1 pero no en 7 | Problema de edición o compatibilidad, no solo de número de versión | Decidiría si el script debe quedarse en 5.1 o migrarse con una alternativa compatible |
Si necesitas depurar a fondo, también merece la pena comparar la ruta del binario que se está llamando. En muchos casos descubro que el sistema estaba usando una instalación vieja que seguía disponible en el PATH, aunque el usuario pensara lo contrario.
Eso me lleva a la comprobación mínima que yo haría antes de tocar un script importante.
La comprobación mínima que yo haría antes de tocar un script importante
Yo me quedo con tres gestos: comprobar la versión, comprobar la edición y fijar el ejecutable correcto. Con eso evito la mayoría de los fallos de compatibilidad en Windows, sobre todo cuando alterno entre scripts antiguos y automatizaciones nuevas.
- Uso
$PSVersionTable.PSVersionpara saber qué motor está activo. - Uso
PSEditionpara distinguir entreDesktopyCore. - Documento el mínimo con
#Requires -Versioncuando el script dependa de una rama concreta. - Si voy a estandarizar equipos nuevos, lanzo
pwshde forma explícita y dejopowershell.exesolo para compatibilidad.
Si tengo que elegir una sola comprobación, hago la del hash table de versión: me da la respuesta real, sin depender de lo que diga el acceso directo ni de cuál de las dos instalaciones estaba en primer plano.