PowerShell ISE vs Visual Studio Code: cuál usar, atajos y configuración

PowerShell ISE vs Visual Studio Code: un puesto de trabajo con dos monitores, uno con un editor de código en tema oscuro y otro con el escritorio de Windows

PowerShell ISE es el editor de scripts que trae Windows desde hace años, y todavía es la primera ventana que abre mucha gente para escribir un script, probar un comando o revisar una tarea que dejó otro técnico. Sin embargo, Microsoft ya no lo desarrolla y recomienda Visual Studio Code con la extensión de PowerShell. Por eso, tarde o temprano, cualquier equipo de TI se plantea la comparación PowerShell ISE vs Visual Studio Code: ¿sigo con el ISE, o me paso a Visual Studio Code con herramientas como PSScriptAnalyzer?

Esta guía responde con datos. En primer lugar, explica qué es PowerShell ISE, qué ofrece cada editor, cuándo conviene uno u otro y cómo configurar los dos. Además, reúne los atajos de teclado, cómo usar PowerShell en Visual Studio Code, la extensión de PowerShell, el analizador PSScriptAnalyzer, varios escenarios completos y los errores más comunes. Si es su primer contacto con el lenguaje, la guía de PowerShell explica los conceptos básicos, y la de módulos de PowerShell cómo instalar herramientas como las que aparecen aquí.

No copiamos el manual sin más. Para empezar, abrimos PowerShell ISE en un Windows 11 Pro 26H2 en español y leímos sus menús con automatización de la interfaz. También ejecutamos un script dentro de él para medir lo que puede y lo que no puede hacer. Por otra parte, leímos el paquete oficial de la extensión de PowerShell, versión 2025.4.0, sin instalarlo, y probamos PSScriptAnalyzer 1.25.0 con un script lleno de defectos en Windows PowerShell 5.1 y en PowerShell 7.6. Por último, lo que no pudimos probar está al final.

Qué es PowerShell ISE

PowerShell ISE (Integrated Scripting Environment, entorno de scripting integrado) es una aplicación de Windows para escribir, ejecutar y depurar scripts de Windows PowerShell en una sola ventana. Por un lado, arriba tiene el panel de scripts, donde se escribe; por otro, abajo está el panel de consola, donde se ve el resultado. Además, colorea la sintaxis, completa los comandos con IntelliSense y permite ejecutar solo una parte del script.

Según la página de Microsoft sobre el ISE, PowerShell ISE ya no recibe funciones nuevas. Sin embargo, como forma parte de Windows, sigue recibiendo correcciones de seguridad y de alta prioridad, y Microsoft no tiene planes de retirarlo. Lo importante es esto: PowerShell ISE solo funciona con Windows PowerShell 5.1. Es decir, no admite PowerShell 7 ni ninguna versión posterior a la 5.1.

En el equipo de prueba, PowerShell ISE estaba instalado en dos versiones, de 64 y de 32 bits:

DatoValor medido
Programa de 64 bitsC:\Windows\System32\WindowsPowerShell\v1.0\powershell_ise.exe
Programa de 32 bitsC:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell_ise.exe
Versión del archivo10.0.26100.9818
Versión de PowerShell dentro del ISE5.1.26100.9818
Nombre del anfitrión ($Host.Name)Windows PowerShell ISE Host
Tiempo hasta abrir la ventanaEntre 1,9 y 2,6 segundos, en tres arranques
MenúsArchivo, Editar, Ver, Herramientas, Depurar, Complementos y Ayuda

PowerShell ISE vs Visual Studio Code: la comparación

La comparación PowerShell ISE vs Visual Studio Code no es entre dos editores parecidos. PowerShell ISE es un programa de Windows hecho solo para Windows PowerShell. En cambio, Visual Studio Code es un editor general y gratuito de Microsoft que se convierte en un entorno de PowerShell al instalarle la extensión de PowerShell. Esta tabla resume las diferencias que más pesan en el trabajo diario:

AspectoPowerShell ISEVisual Studio Code con la extensión de PowerShell
Versiones de PowerShellSolo Windows PowerShell 5.1PowerShell 7.4 o posterior; Windows PowerShell 5.1 con el «mejor esfuerzo»
DesarrolloSin funciones nuevas; solo correccionesActivo: versión estable 2025.4.0 y preliminar 2026.1.2
SistemasSolo WindowsWindows, macOS y Linux
InstalaciónViene con Windows, o bien como característica opcionalSe instala Visual Studio Code y luego la extensión
Análisis del códigoNo tiene, pero se puede usar desde su consolaPSScriptAnalyzer mientras se escribe, activado de fábrica
Codificación de un archivo nuevoUTF-8 con BOMUTF-8 sin BOM
ConsolaUna imitación de consola: no lee teclas y rompe las tildes de los programas externosUna terminal de verdad
Control de versiones (Git)No tieneIntegrado, así que se ven los cambios de cada archivo
Sesiones remotasPestaña de PowerShell en remotoTerminal con Enter-PSSession, o conexión remota del editor

En resumen, PowerShell ISE sigue sirviendo para scripts sencillos de Windows PowerShell 5.1 en un equipo donde no se puede instalar nada. Sin embargo, para todo lo demás, y sobre todo para PowerShell 7, Microsoft y la propia comparación apuntan a Visual Studio Code.

Cuándo PowerShell ISE todavía tiene sentido

  • Un servidor o un equipo de cliente sin permisos para instalar programas. PowerShell ISE ya está ahí, o se agrega como característica de Windows.
  • Scripts que solo deben correr en Windows PowerShell 5.1, por ejemplo con módulos antiguos que no funcionan en PowerShell 7.
  • Una revisión rápida: abrir un script, ejecutar una selección con F8 y cerrar.
  • Formación básica, porque los dos paneles y el botón Ejecutar se entienden sin explicación.

Cuándo conviene Visual Studio Code

  • Cualquier script nuevo para PowerShell 7, que es la versión que recibe novedades.
  • Scripts largos o compartidos, donde el análisis mientras se escribe y Git evitan errores.
  • Trabajo en varios sistemas, porque el mismo editor sirve en Windows, macOS y Linux.
  • Scripts que llaman programas de consola o que piden una tecla, porque la terminal de Visual Studio Code es una consola de verdad y no una imitación como la del ISE.

Cómo abrir PowerShell ISE en Windows 10 y Windows 11

La forma más rápida de abrir PowerShell ISE es escribir su nombre en el cuadro Ejecutar (tecla Windows + R) o en cualquier consola:

powershell_ise.exe

Además, se encuentra en el menú Inicio al buscar «ISE»: en el equipo de prueba, sus accesos se llaman Windows PowerShell ISE 5.1 y Windows PowerShell ISE 5.1 (x86). Para abrirlo como administrador, haga clic derecho sobre él y elija ejecutar como administrador. En cambio, la versión de 32 bits solo hace falta para módulos antiguos de 32 bits.

Si PowerShell ISE no aparece: instalarlo como característica opcional

PowerShell ISE es una característica a petición de Windows. Según la lista de características a petición de Microsoft, su nombre es Microsoft.Windows.PowerShell.ISE~~~~0.0.1.0, ocupa 3,58 MB y existe desde Windows 10, versión 2004. Si alguien la quitó, se puede revisar y volver a instalar desde una consola de PowerShell abierta como administrador:

Get-WindowsCapability -Online -Name 'Microsoft.Windows.PowerShell.ISE*'
Add-WindowsCapability -Online -Name 'Microsoft.Windows.PowerShell.ISE~~~~0.0.1.0'

Así, la primera orden muestra si está instalada (State : Installed) y la segunda la instala. También puede hacerlo desde Configuración, en las características opcionales de Windows, buscando «PowerShell ISE». Eso sí, en Windows Server en modo Core no hay interfaz gráfica, así que PowerShell ISE no está disponible.

Los atajos de PowerShell ISE en español

Aquí está la trampa más útil de esta guía. En PowerShell ISE en español, cinco atajos son distintos de los de la versión en inglés, y la página de atajos de Microsoft en español no lo dice. Además, lo comprobamos de dos maneras: en los textos de la versión en español del programa y desplegando sus menús en la ventana real.

AcciónPowerShell ISE en españolPowerShell ISE en inglés y página de Microsoft
GuardarCtrl+GCtrl+S
AbrirCtrl+ACtrl+O
Seleccionar todoCtrl+ECtrl+A
Ir a la líneaCtrl+LCtrl+G
Pasar a mayúsculasCtrl+Mayús+TCtrl+Mayús+U

La consecuencia práctica es fácil de imaginar: quien viene de otro programa y pulsa Ctrl+A para seleccionar todo el script, en el ISE en español abre el cuadro Abrir. Del mismo modo, quien pulsa Ctrl+S para guardar no guarda nada. Por si fuera poco, la página de atajos de Microsoft en español da los atajos de la versión en inglés.

Los atajos que no cambian

Por suerte, el resto de los atajos de PowerShell ISE es igual en los dos idiomas. Estos son los que más se usan:

AcciónAtajoDónde está
Ejecutar el scriptF5Archivo > Ejecutar
Ejecutar la selección o la línea actualF8Archivo > Ejecutar selección
Detener la ejecuciónCtrl+InterArchivo > Detener operación
Script nuevoCtrl+NArchivo > Nuevo
Fragmentos de códigoCtrl+JEditar > Iniciar fragmentos de código
Completar con IntelliSenseCtrl+EspacioEditar > Iniciar Intellisense
Ayuda del comandoF1Ayuda
Ventana de comandoCtrl+F1Ayuda > Mostrar ventana de comando
Alternar punto de interrupciónF9Depurar
Paso a paso por procedimientosF10Depurar
Paso a paso por instruccionesF11Depurar
Paso a paso para salirMayús+F11Depurar
Detener depuradorMayús+F5Depurar
Pila de llamadasCtrl+Mayús+DDepurar > Mostrar pila de llamadas
Nueva pestaña de PowerShell en remotoCtrl+Mayús+RArchivo
Ir a consolaCtrl+DVer
Ir al panel de scriptsCtrl+IVer

Dos curiosidades de la traducción: el menú Ver dice «Mostar números de línea», con una errata, y la opción Ctrl+] del menú Editar se llama «Ir a Igualar». En inglés es *Go to Match* y lleva a la llave o al paréntesis que cierra el actual.

Configurar PowerShell ISE

PowerShell ISE se configura en Herramientas > Opciones. Estos son los valores de fábrica que encontramos al leerlos desde un script con el objeto $psISE:

OpciónValor de fábrica
FuenteLucida Console, tamaño 9
Zoom100 %
Números de líneaActivados
Esquematización (regiones plegables)Activada
Espera de IntelliSense3 segundos
Archivos recientes en el menú10
Posición del panel de scriptsArriba
Preguntar si se desea guardar los scripts antes de ejecutarActivado
TemaConsola oscura, editor claro (predeterminado)

Además, hay cuatro temas de fábrica: el predeterminado, «Consola clara, editor claro», «Consola clara, editor oscuro» y «Consola oscura, editor oscuro». También se pueden cambiar las opciones desde la consola del propio ISE con $psISE. Por ejemplo, para usar otra fuente más grande y, si hace falta, volver a la configuración de fábrica:

$psISE.Options.FontName = 'Consolas'
$psISE.Options.FontSize = 12
$psISE.Options.RestoreDefaults()

El perfil de PowerShell ISE es otro archivo

PowerShell ISE tiene su propio perfil, distinto del de la consola. Un perfil es un script que se ejecuta al abrir PowerShell, donde mucha gente carga módulos o define funciones. Medido en el equipo de prueba:

AnfitriónPerfil del usuario
PowerShell ISEDocumentos\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1
Consola de Windows PowerShellDocumentos\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Los dosDocumentos\WindowsPowerShell\profile.ps1

Por eso, una función que funciona en la consola puede no existir en el ISE, o al revés. Por lo tanto, si quiere algo en los dos, póngalo en profile.ps1. En el equipo de prueba, la carpeta Documentos estaba dentro de OneDrive, así que los perfiles también. Para crear y abrir el perfil del ISE desde su consola:

$PROFILE
if (-not (Test-Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force }
psEdit $PROFILE

psEdit es una función que solo existe dentro de PowerShell ISE y abre el archivo en una pestaña nueva del panel de scripts.

Lo que PowerShell ISE no puede hacer

PowerShell ISE no es una consola de verdad: imita una consola dentro de una ventana. Esto tiene consecuencias, y las medimos ejecutando un script dentro de él:

PruebaResultado en PowerShell ISE
Si se lee una tecla con $Host.UI.RawUI.ReadKey()Error: «No se puede implementar el método o la operación.»
Comprobar si se pulsó una tecla con [Console]::KeyAvailableError: «No se puede ver si se presionó una tecla cuando cualquiera de las aplicaciones no tiene una consola…»
Mensaje de un programa externo con tildes (dir de una carpeta que no existe)«El n£mero de serie del volumen…», con la tilde rota
Variable $PSStyle de PowerShell 7No existe
Start-TranscriptFunciona
Si se llama a PowerShell 7 con pwsh.exeFunciona: devolvió 7.6.9
Cuando se guarda un archivo nuevoUTF-8 con BOM (bytes EF BB BF)

Por ejemplo, la primera fila explica un error muy común: un script con un «Presione cualquier tecla para continuar» funciona en la consola y falla en el ISE.

Por qué se rompen las tildes en PowerShell ISE

Los programas de consola de Windows, como cmd, ipconfig o dir, escriben en español con la página de códigos OEM 850. PowerShell ISE, en cambio, lee su salida como Windows-1252, así que la «ú» llega convertida en «£». En cambio, en la consola normal el mismo mensaje sale bien. La solución, comprobada dentro del ISE, es decirle qué página de códigos usar antes de llamar al programa:

[Console]::OutputEncoding = [Text.Encoding]::GetEncoding([Globalization.CultureInfo]::CurrentCulture.TextInfo.OEMCodePage)

Con esa línea, el mismo mensaje salió como «El número de serie del volumen». Eso sí, el cambio dura hasta cerrar la pestaña de PowerShell, así que conviene ponerlo en el perfil del ISE si se usan mucho estos programas.

Ejecutar PowerShell 7 desde PowerShell ISE

Aunque PowerShell ISE no admite PowerShell 7, sí puede lanzarlo como un programa más. Así se ejecuta un script en PowerShell 7 sin salir del ISE, aunque sin depurarlo:

pwsh.exe -NoProfile -File .\Revisar-Equipos.ps1

En definitiva, es un apaño útil para una prueba, pero no sustituye a un editor que entienda PowerShell 7.

PowerShell en Visual Studio Code: instalación y primeros pasos

Para usar PowerShell en Visual Studio Code hacen falta dos piezas: el editor y la extensión de PowerShell de Microsoft. Además, las dos son gratuitas. Con winget, el gestor de paquetes de Windows que explicamos en la guía de winget, se instalan así desde una consola:

winget install --id Microsoft.VisualStudioCode -e
code --install-extension ms-vscode.PowerShell

También puede instalar la extensión desde el propio editor. Según la guía de Microsoft para usar Visual Studio Code, basta con pulsar Ctrl+P, escribir ext install powershell y elegir la extensión de PowerShell de Microsoft. Por cierto, en la tienda de extensiones esa extensión suma más de 22,7 millones de instalaciones.

Luego, una vez instalada, al abrir un archivo .ps1 la extensión arranca sola y abre abajo su terminal propia, la Extension Terminal. Desde ahí, además, se ejecuta lo que se selecciona con F8, igual que en el ISE.

Qué versión de PowerShell usa la extensión

La extensión busca las instalaciones de PowerShell en las rutas habituales del sistema. Para elegir con cuál trabajar, abra el menú de sesión con el icono de llaves {} de la barra de estado, o con la paleta de comandos (Ctrl+Mayús+P) y el comando PowerShell: Show Session Menu. Allí aparecen, entonces, las versiones que encuentra, incluida Windows PowerShell 5.1. Si quiere fijar una, el ajuste powershell.powerShellDefaultVersion acepta el nombre tal como sale en ese menú.

Sin embargo, conviene saber lo que dice el código de la extensión 2025.4.0 sobre las versiones antiguas:

Versión de PowerShellQué hace la extensión
Anterior a 5.1No la admite, así que pide actualizar
Windows PowerShell 5.1La admite con el «mejor esfuerzo» y sugiere probar PowerShell 7
De 6.0 a 7.3Avisa de que llegó al final del soporte
7.4 o posteriorLa admite

Además, la fecha importa. Según el ciclo de vida de PowerShell, PowerShell 7.4 y PowerShell 7.5 dejan de tener soporte el 10 de noviembre de 2026. La versión con soporte largo vigente es PowerShell 7.6, hasta el 14 de noviembre de 2028. Por cierto, la misma guía de Microsoft dice que la extensión admite PowerShell 7.2 y versiones posteriores, pero su código trata como fuera de soporte cualquier versión anterior a la 7.4.

Configurar PowerShell en Visual Studio Code

La extensión de PowerShell trae 65 ajustes. Estos son los valores de fábrica que más conviene conocer, leídos de su paquete:

AjusteValor de fábricaQué hace
powershell.scriptAnalysis.enabletrueAnaliza el script mientras se escribe, con PSScriptAnalyzer
powershell.codeFormatting.presetCustomEstilo del formateo automático (también Allman, OTBS y Stroustrup)
powershell.codeFormatting.autoCorrectAliasesfalseSi se activa, cambia gci por Get-ChildItem al formatear
powershell.integratedConsole.focusConsoleOnExecutetrueCuando se pulsa F8, el cursor salta a la terminal
powershell.integratedConsole.showOnStartuptrueMuestra la terminal de la extensión cuando arranca
powershell.enableProfileLoadingtrueCarga los perfiles de PowerShell
powershell.buttons.showRunButtonstrueMuestra los botones Run y Run Selection arriba del editor
powershell.helpCompletionBlockCommentEstilo de la ayuda que se genera al escribir ## sobre una función

Para cambiarlos, primero abra la configuración en formato JSON desde la paleta de comandos (Preferences: Open User Settings (JSON)). Por ejemplo, este bloque es un buen punto de partida para trabajar con scripts que también se ejecuten en Windows PowerShell 5.1:

{
    "[powershell]": {
        "files.encoding": "utf8bom",
        "editor.formatOnSave": true
    },
    "powershell.codeFormatting.preset": "OTBS",
    "powershell.codeFormatting.autoCorrectAliases": true,
    "powershell.integratedConsole.focusConsoleOnExecute": false
}

De todas, la primera línea es la más importante, y la explica el apartado de codificación más abajo. Por su parte, las demás formatean el código al guardar, cambian los alias por el nombre completo del comando y dejan el cursor en el editor al ejecutar con F8, como en el ISE.

El modo ISE de Visual Studio Code

Además, para quien viene de PowerShell ISE, la extensión trae un atajo: el modo ISE. Concretamente, se activa desde la paleta de comandos con PowerShell: Enable ISE Mode, y se quita con PowerShell: Disable ISE Mode. En la versión 2025.4.0, el modo ISE cambia estos nueve ajustes:

AjusteValor
debug.openDebugneverOpen
editor.tabCompletionon
powershell.integratedConsole.focusConsoleOnExecutefalse
files.defaultLanguagepowershell
workbench.colorThemePowerShell ISE
editor.wordSeparatorsSin el guion, para seleccionar Get-ChildItem con doble clic
powershell.buttons.showPanelMovementButtonstrue
powershell.codeFolding.showLastLinefalse
powershell.sideBar.CommandExplorerVisibilitytrue

En otras palabras, el modo ISE pone el tema de colores del ISE, hace que los archivos nuevos sean de PowerShell, completa con la tecla Tab y muestra el explorador de comandos en la barra lateral. Ojo con una diferencia: la página de Microsoft sobre la experiencia del ISE en VS Code incluye en la lista de cambios una tabla de atajos y la ocultación de la barra de actividad, pero el código del modo ISE no toca ni los atajos ni esa barra.

Atajos de PowerShell en Visual Studio Code

Estos son los atajos que cambian al pasar de PowerShell ISE a Visual Studio Code. Los de la extensión salen de su paquete; los de depuración y la paleta, de la guía de Microsoft; y Guardar y Seleccionar todo son los de fábrica de Visual Studio Code:

AcciónPowerShell ISE en españolVisual Studio Code
Ejecutar la selección o la líneaF8F8
Ejecutar o depurar el scriptF5F5
GuardarCtrl+GCtrl+S
Seleccionar todoCtrl+ECtrl+A
Alternar punto de interrupciónF9F9
Ayuda del comandoF1Ctrl+F1
Fragmentos de códigoCtrl+JCtrl+Alt+J
Paleta de comandosNo tieneCtrl+Mayús+P o F1
Cambiar un alias por el comando completoNo tieneMayús+Alt+E
Comandos de otros módulosNo tieneMayús+Alt+S

Sobre todo, fíjese en Guardar y Seleccionar todo: Visual Studio Code usa los atajos habituales de Windows, mientras que el ISE en español usa otros. Por eso, quien migra se lleva la sorpresa al revés.

PSScriptAnalyzer: revisar un script antes de ejecutarlo

PSScriptAnalyzer es el analizador de código de Microsoft para PowerShell. Es decir, revisa un script con un conjunto de reglas y avisa de malas prácticas, errores probables y riesgos. La extensión de PowerShell lo usa de fábrica: los avisos aparecen subrayados en el editor y en la vista Problemas. En cambio, PowerShell ISE no lo integra, aunque se puede usar desde su consola como cualquier módulo.

Nosotros medimos la versión 1.25.0, publicada por Microsoft el 20 de marzo de 2026. En total, trae 75 reglas: 8 de error, 56 de advertencia y 11 informativas. Para instalarla en el perfil del usuario:

Install-PSResource -Name PSScriptAnalyzer -Scope CurrentUser

En Windows PowerShell 5.1 sin PSResourceGet, use Install-Module -Name PSScriptAnalyzer -Scope CurrentUser. Después, para analizar un script basta con esto:

Invoke-ScriptAnalyzer -Path .\Borrar-Temporales.ps1
Invoke-ScriptAnalyzer -Path .\Borrar-Temporales.ps1 -Severity Error

Lo que encontró en un script con defectos

Para probarlo, escribimos un script de nueve líneas con los defectos de muchos scripts reales: alias, una contraseña en texto, una comparación con $null al revés, un catch vacío e Invoke-Expression. PSScriptAnalyzer encontró 12 problemas en menos de un segundo, con el mismo resultado en Windows PowerShell 5.1 y en PowerShell 7.6:

LíneaReglaGravedadQué detecta
1PSUseApprovedVerbsAdvertenciaEl verbo «Borrar» no es un verbo aprobado de PowerShell
1PSUseSingularNounsAdvertenciaEl nombre de la función está en plural
3 y 5PSUseDeclaredVarsMoreThanAssignmentsAdvertenciaDos variables se asignan y nunca se usan
5PSAvoidUsingConvertToSecureStringWithPlainTextErrorUna contraseña convertida desde texto plano
6PSAvoidUsingCmdletAliasesAdvertenciaLos alias gci, ? y % (tres avisos)
7PSAvoidUsingWriteHostAdvertenciaUso de Write-Host
7PSPossibleIncorrectComparisonWithNullAdvertencia$null debe ir a la izquierda de la comparación
8PSAvoidUsingEmptyCatchBlockAdvertenciaUn catch vacío esconde los errores, porque no los muestra
8PSAvoidUsingInvokeExpressionAdvertenciaUso de Invoke-Expression

En cambio, con -Severity Error solo quedó el aviso de la contraseña, el único error de los doce.

Cuidado con -Fix: puede romper el script

Invoke-ScriptAnalyzer tiene el parámetro -Fix, que corrige solo lo que sabe corregir. Lo probamos sobre una copia y, en efecto, cambió los alias por los comandos completos y puso $null a la izquierda, y quedaron 7 avisos. Pero también cambió el nombre de la función de Borrar-Temporales a Borrar-Temporale, para cumplir la regla del sustantivo en singular. Como resultado, cualquier otro script que llame a Borrar-Temporales dejaría de funcionar. Por esa razón, conviene usar -Fix solo sobre una copia, revisar los cambios con Git o con una comparación y nunca aplicarlo a un módulo que usan otros.

Si solo quiere formatear sin cambiar nombres, use Invoke-Formatter, que solo toca sangrías y espacios. Por ejemplo, en nuestra prueba dejó where sin cambiar por Where-Object, porque esa corrección es opcional.

La codificación: por qué un script pierde las tildes

Este es, quizá, el problema que más confunde al pasar de PowerShell ISE a Visual Studio Code. PowerShell ISE guarda los archivos nuevos en UTF-8 con BOM, una marca de tres bytes al principio. Visual Studio Code, en cambio, los guarda de fábrica en UTF-8 sin BOM, según la guía de Microsoft sobre la codificación. Por un lado, PowerShell 7 lee bien los dos formatos; por otro, Windows PowerShell 5.1 lee un archivo sin BOM como Windows-1252. En consecuencia, un mensaje como «Configuración» sale como «Configuración».

Editor que guarda el scriptPowerShell 7Windows PowerShell 5.1
PowerShell ISE (UTF-8 con BOM)BienBien
Visual Studio Code de fábrica (UTF-8 sin BOM)BienTildes rotas
Visual Studio Code con utf8bomBienBien

La solución es la línea "files.encoding": "utf8bom" del bloque de configuración anterior, que la propia guía de Microsoft propone para los archivos de PowerShell. Para los scripts que ya existen, el escenario 3 dice cuáles faltan por corregir y cómo hacerlo.

Escenarios de ejemplo

Escenario 1: pasar de PowerShell ISE a Visual Studio Code

  1. Instale Visual Studio Code y la extensión de PowerShell con las dos órdenes de winget y code de arriba.
  2. Instale PowerShell 7 si todavía no lo tiene, porque es la versión que recibe novedades.
  3. Abra la paleta de comandos y active PowerShell: Enable ISE Mode.
  4. Agregue a la configuración "files.encoding": "utf8bom" para los archivos de PowerShell.
  5. Copie lo que necesite de su perfil del ISE a profile.ps1, que cargan todos los anfitriones.
  6. Ensaye los atajos nuevos: Ctrl+S para guardar y Ctrl+A para seleccionar todo.
  7. Abra sus scripts y revise la vista Problemas: es la primera revisión con PSScriptAnalyzer.

Escenario 2: revisar todos los scripts de una carpeta

Antes de pasar los scripts de un equipo a otro editor o a PowerShell 7, conviene saber qué problemas tienen. Para eso, este bloque analiza todos los scripts de una carpeta y sus subcarpetas, y guarda en el escritorio un CSV que abre bien en Excel:

$carpeta = 'C:\Scripts'
$salida = Join-Path ([Environment]::GetFolderPath('Desktop')) 'revision-scripts.csv'
$codificacion = if ($PSVersionTable.PSVersion.Major -ge 6) { 'utf8BOM' } else { 'UTF8' }
Invoke-ScriptAnalyzer -Path $carpeta -Recurse -Severity Warning, Error |
    Select-Object ScriptName, Line, Severity, RuleName, Message |
    Export-Csv -Path $salida -NoTypeInformation -Encoding $codificacion -Delimiter ';'

Además, el punto y coma como separador es el que usa Excel con la configuración regional de Colombia. Además, la codificación cambia según la versión para que las tildes salgan bien en las dos.

Escenario 3: encontrar los scripts que perderán las tildes en Windows PowerShell 5.1

Este bloque lista los scripts que tienen letras fuera del ASCII, como tildes o la eñe, y no llevan BOM. En otras palabras, son los que fallarán en Windows PowerShell 5.1. PSScriptAnalyzer también los marca, con la regla PSUseBOMForUnicodeEncodedFile, pero este bloque no necesita instalar nada:

Get-ChildItem -Path 'C:\Scripts' -Filter *.ps1 -Recurse | ForEach-Object {
    $b = [System.IO.File]::ReadAllBytes($_.FullName)
    $conBom = $b.Length -ge 3 -and $b[0] -eq 0xEF -and $b[1] -eq 0xBB -and $b[2] -eq 0xBF
    $noAscii = [bool]($b | Where-Object { $_ -gt 127 } | Select-Object -First 1)
    if ($noAscii -and -not $conBom) { $_.FullName }
}

Después, para corregir uno, se vuelve a guardar con BOM sin cambiar el texto. Eso sí, haga primero una copia del archivo:

$ruta = 'C:\Scripts\Inventario.ps1'
$texto = [System.IO.File]::ReadAllText($ruta, [System.Text.Encoding]::UTF8)
[System.IO.File]::WriteAllText($ruta, $texto, (New-Object System.Text.UTF8Encoding $true))

Escenario 4: saber en qué editor se está ejecutando un script

A veces, además, un script debe comportarse distinto en el ISE, por ejemplo para no pedir una tecla. Para eso, la variable $Host.Name lo dice: vale Windows PowerShell ISE Host en PowerShell ISE y ConsoleHost en la consola, según nuestras pruebas.

if ($Host.Name -eq 'Windows PowerShell ISE Host') {
    Write-Warning 'Este script pide una tecla: ejecútelo en una consola.'
    return
}

Errores comunes y cómo resolverlos

Mensaje o síntomaCausaSolución
«No se puede implementar el método o la operación.» al llamar a ReadKeyPorque PowerShell ISE no es una consolaEjecute el script en una consola o en Visual Studio Code
Tildes rotas en la salida de ipconfig, dir o cmd dentro del ISEPorque el ISE lee la salida como Windows-1252Fije [Console]::OutputEncoding a la página OEM
Tildes rotas en un script hecho en Visual Studio Code y ejecutado en 5.1Porque el archivo se guardó sin BOMfiles.encoding en utf8bom y volver a guardar
Ctrl+S no guarda y Ctrl+A abre un archivoPorque PowerShell ISE en español usa otros atajosCtrl+G para guardar y Ctrl+E para seleccionar todo
«Hay un comando ejecutándose. Espere.»Porque el ISE está ejecutando algoEspere o pulse Ctrl+Inter para detenerlo
La extensión dice que Windows PowerShell tiene soporte con el «mejor esfuerzo»Porque arrancó con la versión 5.1Instale PowerShell 7 y elíjalo en el menú de sesión
La extensión avisa de que la versión llegó al final del soportePorque usa PowerShell 6.0 a 7.3Actualice a PowerShell 7.6
Una función deja de encontrarse después de -FixPorque PSScriptAnalyzer le cambió el nombreRevise los cambios y restaure el nombre
Una función del perfil no existe en el ISEPorque el ISE carga su propio perfilPóngala en profile.ps1

Lo que no probamos

  • No instalamos la extensión de PowerShell en Visual Studio Code. Leímos su paquete oficial 2025.4.0, con sus ajustes, atajos y el código del modo ISE, pero no la ejecutamos. Por lo tanto, no medimos su terminal ni su depurador.
  • No cambiamos las opciones del ISE del equipo. Las leímos desde un script, pero las órdenes que las cambian solo se validaron, sin ejecutarlas.
  • No instalamos ni quitamos la característica de PowerShell ISE, porque exige permisos de administrador.
  • No probamos macOS ni Linux.

Recomendaciones

  • Use Visual Studio Code con la extensión de PowerShell para los scripts nuevos, y PowerShell 7.6 como versión principal.
  • Guarde los scripts en UTF-8 con BOM si alguna vez se van a ejecutar en Windows PowerShell 5.1.
  • Revise los scripts con PSScriptAnalyzer antes de compartirlos, y use -Fix solo sobre una copia.
  • Mantenga PowerShell ISE para lo que hace bien: revisiones rápidas en equipos donde no se puede instalar nada.
  • Aprenda los atajos del ISE en español si trabaja en él: Ctrl+G para guardar y Ctrl+E para seleccionar todo.
  • No use ReadKey ni pausas de consola en scripts que alguien pueda abrir en el ISE.
  • Ponga lo común en profile.ps1, para que funcione igual en el ISE, en la consola y en Visual Studio Code.

Preguntas frecuentes

¿Microsoft va a quitar PowerShell ISE de Windows?

No, por ahora. Microsoft dice que PowerShell ISE ya no recibe funciones nuevas, que sigue recibiendo correcciones de seguridad y que no tiene planes de quitarlo de Windows. Para PowerShell 7 recomienda Visual Studio Code con la extensión de PowerShell.

¿Puedo usar PowerShell 7 en PowerShell ISE?

No. PowerShell ISE solo funciona con Windows PowerShell 5.1. Como mucho, puede lanzar pwsh.exe como un programa más para ejecutar un script, sin depurarlo.

¿Visual Studio Code es lo mismo que Visual Studio?

No. Visual Studio Code es un editor gratuito y ligero que sirve para PowerShell con su extensión. En cambio, Visual Studio es un entorno de desarrollo más grande, pensado sobre todo para programar aplicaciones.

¿PSScriptAnalyzer funciona en PowerShell ISE?

Sí, como módulo. Se instala y se ejecuta Invoke-ScriptAnalyzer desde la consola del ISE. Sin embargo, el ISE no subraya los problemas mientras se escribe, como Visual Studio Code.

Conclusión

PowerShell ISE sigue en Windows y sirve para tareas sencillas de Windows PowerShell 5.1, pero ya no avanza y no admite PowerShell 7. Visual Studio Code con la extensión de PowerShell es hoy el editor recomendado por Microsoft, y con el modo ISE, la codificación en UTF-8 con BOM y PSScriptAnalyzer el cambio es más fácil de lo que parece. Aun así, lo que más sorprende en la práctica son los detalles: los atajos del ISE en español, las tildes que se rompen y un -Fix que cambia nombres. Si su equipo necesita apoyo con los scripts y las herramientas del día a día, nuestra mesa de ayuda TI atiende estas consultas como parte del soporte técnico para empresas. Además, el mantenimiento de los equipos y sus herramientas forma parte de nuestros servicios administrados de TI, dentro de los servicios de TI para empresas de KHARONTE.

Hablemos de la TI de su empresa

Cuéntenos qué necesita su operación y le enviamos una propuesta por escrito. Cada línea del portafolio se contrata por separado.

Compartir este artículo

Últimas entradas

Escríbanos ahora