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:
| Dato | Valor medido |
|---|---|
| Programa de 64 bits | C:\Windows\System32\WindowsPowerShell\v1.0\powershell_ise.exe |
| Programa de 32 bits | C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell_ise.exe |
| Versión del archivo | 10.0.26100.9818 |
| Versión de PowerShell dentro del ISE | 5.1.26100.9818 |
Nombre del anfitrión ($Host.Name) | Windows PowerShell ISE Host |
| Tiempo hasta abrir la ventana | Entre 1,9 y 2,6 segundos, en tres arranques |
| Menús | Archivo, 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:
| Aspecto | PowerShell ISE | Visual Studio Code con la extensión de PowerShell |
|---|---|---|
| Versiones de PowerShell | Solo Windows PowerShell 5.1 | PowerShell 7.4 o posterior; Windows PowerShell 5.1 con el «mejor esfuerzo» |
| Desarrollo | Sin funciones nuevas; solo correcciones | Activo: versión estable 2025.4.0 y preliminar 2026.1.2 |
| Sistemas | Solo Windows | Windows, macOS y Linux |
| Instalación | Viene con Windows, o bien como característica opcional | Se instala Visual Studio Code y luego la extensión |
| Análisis del código | No tiene, pero se puede usar desde su consola | PSScriptAnalyzer mientras se escribe, activado de fábrica |
| Codificación de un archivo nuevo | UTF-8 con BOM | UTF-8 sin BOM |
| Consola | Una imitación de consola: no lee teclas y rompe las tildes de los programas externos | Una terminal de verdad |
| Control de versiones (Git) | No tiene | Integrado, así que se ven los cambios de cada archivo |
| Sesiones remotas | Pestaña de PowerShell en remoto | Terminal 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ón | PowerShell ISE en español | PowerShell ISE en inglés y página de Microsoft |
|---|---|---|
| Guardar | Ctrl+G | Ctrl+S |
| Abrir | Ctrl+A | Ctrl+O |
| Seleccionar todo | Ctrl+E | Ctrl+A |
| Ir a la línea | Ctrl+L | Ctrl+G |
| Pasar a mayúsculas | Ctrl+Mayús+T | Ctrl+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ón | Atajo | Dónde está |
|---|---|---|
| Ejecutar el script | F5 | Archivo > Ejecutar |
| Ejecutar la selección o la línea actual | F8 | Archivo > Ejecutar selección |
| Detener la ejecución | Ctrl+Inter | Archivo > Detener operación |
| Script nuevo | Ctrl+N | Archivo > Nuevo |
| Fragmentos de código | Ctrl+J | Editar > Iniciar fragmentos de código |
| Completar con IntelliSense | Ctrl+Espacio | Editar > Iniciar Intellisense |
| Ayuda del comando | F1 | Ayuda |
| Ventana de comando | Ctrl+F1 | Ayuda > Mostrar ventana de comando |
| Alternar punto de interrupción | F9 | Depurar |
| Paso a paso por procedimientos | F10 | Depurar |
| Paso a paso por instrucciones | F11 | Depurar |
| Paso a paso para salir | Mayús+F11 | Depurar |
| Detener depurador | Mayús+F5 | Depurar |
| Pila de llamadas | Ctrl+Mayús+D | Depurar > Mostrar pila de llamadas |
| Nueva pestaña de PowerShell en remoto | Ctrl+Mayús+R | Archivo |
| Ir a consola | Ctrl+D | Ver |
| Ir al panel de scripts | Ctrl+I | Ver |
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ón | Valor de fábrica |
|---|---|
| Fuente | Lucida Console, tamaño 9 |
| Zoom | 100 % |
| Números de línea | Activados |
| Esquematización (regiones plegables) | Activada |
| Espera de IntelliSense | 3 segundos |
| Archivos recientes en el menú | 10 |
| Posición del panel de scripts | Arriba |
| Preguntar si se desea guardar los scripts antes de ejecutar | Activado |
| Tema | Consola 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ón | Perfil del usuario |
|---|---|
| PowerShell ISE | Documentos\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1 |
| Consola de Windows PowerShell | Documentos\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 |
| Los dos | Documentos\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:
| Prueba | Resultado 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]::KeyAvailable | Error: «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 7 | No existe |
Start-Transcript | Funciona |
Si se llama a PowerShell 7 con pwsh.exe | Funciona: devolvió 7.6.9 |
| Cuando se guarda un archivo nuevo | UTF-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 PowerShell | Qué hace la extensión |
|---|---|
| Anterior a 5.1 | No la admite, así que pide actualizar |
| Windows PowerShell 5.1 | La admite con el «mejor esfuerzo» y sugiere probar PowerShell 7 |
| De 6.0 a 7.3 | Avisa de que llegó al final del soporte |
| 7.4 o posterior | La 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:
| Ajuste | Valor de fábrica | Qué hace |
|---|---|---|
powershell.scriptAnalysis.enable | true | Analiza el script mientras se escribe, con PSScriptAnalyzer |
powershell.codeFormatting.preset | Custom | Estilo del formateo automático (también Allman, OTBS y Stroustrup) |
powershell.codeFormatting.autoCorrectAliases | false | Si se activa, cambia gci por Get-ChildItem al formatear |
powershell.integratedConsole.focusConsoleOnExecute | true | Cuando se pulsa F8, el cursor salta a la terminal |
powershell.integratedConsole.showOnStartup | true | Muestra la terminal de la extensión cuando arranca |
powershell.enableProfileLoading | true | Carga los perfiles de PowerShell |
powershell.buttons.showRunButtons | true | Muestra los botones Run y Run Selection arriba del editor |
powershell.helpCompletion | BlockComment | Estilo 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:
| Ajuste | Valor |
|---|---|
debug.openDebug | neverOpen |
editor.tabCompletion | on |
powershell.integratedConsole.focusConsoleOnExecute | false |
files.defaultLanguage | powershell |
workbench.colorTheme | PowerShell ISE |
editor.wordSeparators | Sin el guion, para seleccionar Get-ChildItem con doble clic |
powershell.buttons.showPanelMovementButtons | true |
powershell.codeFolding.showLastLine | false |
powershell.sideBar.CommandExplorerVisibility | true |
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ón | PowerShell ISE en español | Visual Studio Code |
|---|---|---|
| Ejecutar la selección o la línea | F8 | F8 |
| Ejecutar o depurar el script | F5 | F5 |
| Guardar | Ctrl+G | Ctrl+S |
| Seleccionar todo | Ctrl+E | Ctrl+A |
| Alternar punto de interrupción | F9 | F9 |
| Ayuda del comando | F1 | Ctrl+F1 |
| Fragmentos de código | Ctrl+J | Ctrl+Alt+J |
| Paleta de comandos | No tiene | Ctrl+Mayús+P o F1 |
| Cambiar un alias por el comando completo | No tiene | Mayús+Alt+E |
| Comandos de otros módulos | No tiene | Mayú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ínea | Regla | Gravedad | Qué detecta |
|---|---|---|---|
| 1 | PSUseApprovedVerbs | Advertencia | El verbo «Borrar» no es un verbo aprobado de PowerShell |
| 1 | PSUseSingularNouns | Advertencia | El nombre de la función está en plural |
| 3 y 5 | PSUseDeclaredVarsMoreThanAssignments | Advertencia | Dos variables se asignan y nunca se usan |
| 5 | PSAvoidUsingConvertToSecureStringWithPlainText | Error | Una contraseña convertida desde texto plano |
| 6 | PSAvoidUsingCmdletAliases | Advertencia | Los alias gci, ? y % (tres avisos) |
| 7 | PSAvoidUsingWriteHost | Advertencia | Uso de Write-Host |
| 7 | PSPossibleIncorrectComparisonWithNull | Advertencia | $null debe ir a la izquierda de la comparación |
| 8 | PSAvoidUsingEmptyCatchBlock | Advertencia | Un catch vacío esconde los errores, porque no los muestra |
| 8 | PSAvoidUsingInvokeExpression | Advertencia | Uso 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 script | PowerShell 7 | Windows PowerShell 5.1 |
|---|---|---|
| PowerShell ISE (UTF-8 con BOM) | Bien | Bien |
| Visual Studio Code de fábrica (UTF-8 sin BOM) | Bien | Tildes rotas |
Visual Studio Code con utf8bom | Bien | Bien |
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
- Instale Visual Studio Code y la extensión de PowerShell con las dos órdenes de winget y
codede arriba. - Instale PowerShell 7 si todavía no lo tiene, porque es la versión que recibe novedades.
- Abra la paleta de comandos y active PowerShell: Enable ISE Mode.
- Agregue a la configuración
"files.encoding": "utf8bom"para los archivos de PowerShell. - Copie lo que necesite de su perfil del ISE a
profile.ps1, que cargan todos los anfitriones. - Ensaye los atajos nuevos: Ctrl+S para guardar y Ctrl+A para seleccionar todo.
- 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íntoma | Causa | Solución |
|---|---|---|
«No se puede implementar el método o la operación.» al llamar a ReadKey | Porque PowerShell ISE no es una consola | Ejecute el script en una consola o en Visual Studio Code |
Tildes rotas en la salida de ipconfig, dir o cmd dentro del ISE | Porque el ISE lee la salida como Windows-1252 | Fije [Console]::OutputEncoding a la página OEM |
| Tildes rotas en un script hecho en Visual Studio Code y ejecutado en 5.1 | Porque el archivo se guardó sin BOM | files.encoding en utf8bom y volver a guardar |
| Ctrl+S no guarda y Ctrl+A abre un archivo | Porque PowerShell ISE en español usa otros atajos | Ctrl+G para guardar y Ctrl+E para seleccionar todo |
| «Hay un comando ejecutándose. Espere.» | Porque el ISE está ejecutando algo | Espere 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.1 | Instale PowerShell 7 y elíjalo en el menú de sesión |
| La extensión avisa de que la versión llegó al final del soporte | Porque usa PowerShell 6.0 a 7.3 | Actualice a PowerShell 7.6 |
Una función deja de encontrarse después de -Fix | Porque PSScriptAnalyzer le cambió el nombre | Revise los cambios y restaure el nombre |
| Una función del perfil no existe en el ISE | Porque el ISE carga su propio perfil | Pó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
-Fixsolo 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
ReadKeyni 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.




