Microsoft ha publicado la quinta vista previa de PowerShell 7.7, identificada como 7.7.0-preview.5 y construida sobre el runtime de .NET 11.0.0-rc.1. La build trae cambios que alteran el comportamiento de cmdlets muy utilizados, empezando por la forma en que New-Guid genera identificadores únicos, además de nuevas herramientas para gestionar carpetas temporales y rutas de archivo, y varias mejoras en el autocompletado con la tecla Tab.
Esta build llega tras las vistas previas anteriores de PowerShell 7.7 y actualiza dos módulos clave: Microsoft.PowerShell.PSResourceGet pasa a la v1.3.0-preview2 y PSReadLine se sitúa en la v2.4.5, dos piezas que afectan directamente a la gestión de paquetes y a la experiencia interactiva en la consola. El repositorio oficial en GitHub recoge el listado completo de cambios en su archivo CHANGELOG, documentado también en la página de novedades de Microsoft Learn.
Por qué importa el salto a .NET 11.0.0 RC1
El cambio de base en esta vista previa es el salto a .NET 11.0.0-rc.1, la primera release candidate del próximo runtime de Microsoft. Al apoyarse en una versión aún no definitiva, PowerShell empieza a validar la compatibilidad de sus cmdlets y módulos antes de que .NET 11 llegue a su versión final.
Para quienes gestionáis infraestructuras con PowerShell, esto implica que conviene probar vuestros scripts críticos en un entorno de pruebas antes de sustituir versiones anteriores, precisamente porque la base del runtime todavía puede cambiar. La combinación de .NET 11.0.0-rc.1 con los módulos actualizados, PSResourceGet v1.3.0-preview2 y PSReadLine v2.4.5, confirma que esta build sigue en fase de validación.
La vista previa también actualiza la telemetría de PowerShell para respetar la configuración de «Diagnóstico y comentarios» de Windows, un ajuste que forma parte de ese mismo proceso de adaptación al nuevo runtime. Microsoft no ha indicado todavía una fecha para la disponibilidad general de la rama 7.7, por lo que el calendario de salida definitivo queda abierto.
New-Guid deja de generar GUIDs aleatorios por defecto
El cambio de comportamiento más relevante de esta vista previa afecta al cmdlet New-Guid. Por defecto, ahora genera identificadores UUID versión 7, que se pueden ordenar cronológicamente, en lugar de los UUID versión 4 completamente aleatorios que generaba hasta la versión anterior. El formato de salida no varía, así que los scripts que simplemente consumen el GUID como cadena de texto no notarán diferencia.
El problema aparece en los scripts que dependen de la aleatoriedad total del identificador, por ejemplo para generar tokens impredecibles o claves de sesión. Si vuestro código necesita esa propiedad, Microsoft recomienda invocar directamente [guid]::NewGuid() en lugar de confiar en el comportamiento por defecto del cmdlet. Este ajuste va acompañado de otro cambio en la validación de argumentos: las comprobaciones de valores nulos o vacíos, que antes lanzaban System.ArgumentException, ahora generan System.Management.Automation.PSArgumentNullException, lo que puede romper bloques try/catch que capturan el tipo de excepción anterior de forma explícita.
Nuevas herramientas para gestionar archivos y rutas
Esta vista previa añade el cmdlet New-TemporaryDirectory, que crea carpetas temporales de forma nativa sin recurrir a combinaciones manuales de variables de entorno y nombres aleatorios. Es una utilidad pequeña, pero resuelve una tarea que hasta ahora exigía escribir varias líneas de código repetidas en distintos scripts.
Join-Path estrena el parámetro -Extension, pensado para construir rutas de archivo completas sin necesidad de concatenar cadenas de texto manualmente. Los cmdlets de la familia Format- (Format-List, Format-Table y Format-Custom) incorporan además el parámetro -ExcludeProperty, útil para excluir campos concretos de la salida sin tener que filtrar antes con Select-Object.
También cambia Export-Csv: los parámetros -Append y -NoHeader pasan a ser mutuamente excluyentes, de modo que ya no se pueden combinar de la forma que antes generaba resultados inconsistentes en el archivo final. La build corrige además una comprobación de rutas de perfil de usuario local y un problema de caché en la ruta PATH que afectaba a la detección de comandos, dos ajustes que refuerzan la fiabilidad de las operaciones con rutas de archivo que introduce esta misma versión.
Mejoras en el autocompletado y la descarga de archivos
El autocompletado con la tecla Tab recibe dos ajustes concretos: se añade la capacidad de completar automáticamente las claves de $PSBoundParameters dentro de ramas switch y patrones de acceso, y se corrige una regresión que afectaba al completado de parámetros posicionales en versiones anteriores.
Invoke-WebRequest, por su parte, mejora la forma en que determina la ruta del archivo de salida cuando se descarga un recurso, y ajusta el comportamiento por defecto de la cabecera Authorization durante las redirecciones, un cambio que podría evitar que las credenciales se filtren hacia dominios distintos del original en determinados escenarios. Invoke-RestMethod también corrige un fallo que impedía trabajar con archivos de solo lectura al enviar datos multipart. A esto se suma una corrección en el renderizado de la barra de progreso cuando se usan caracteres Unicode de ancho completo, un detalle que mejora la legibilidad en terminales durante operaciones largas como las descargas.
Funciones experimentales cómo bajar PowerShell 7.7
La vista previa mantiene activas, aunque no habilitadas por defecto, tres funciones experimentales. PSLoadAssemblyFromNativeCode permite cargar ensamblados desde código nativo, PSSerializeJSONLongEnumAsNumber hace que ConvertTo-Json trate las enumeraciones largas como números en lugar de como cadenas de texto, y PSProfileDSCResource añade un recurso de DSC versión 3 pensado para gestionar perfiles de PowerShell. Ninguna de las tres está pensada para entornos de producción todavía, pero su presencia en esta build anticipa una mayor integración con código nativo y una gestión de datos más flexible en los flujos que dependen de JSON.
El repositorio oficial de PowerShell en GitHub aloja esta build y el archivo CHANGELOG donde constan todos los cambios. Se trata de una versión preliminar pensada para pruebas, de modo que podría instalarse junto a una copia estable de PowerShell 7 sin sustituirla, aunque este extremo no se precisa en la documentación oficial consultada.
