Pide tu presupuesto ya!
Adoptaste PowerShell Core 6 temprano. Movió scripts a .NET Core. Te ocupaste de los problemas de compatibilidad. Ahora Microsoft quiere que actualices nuevamente.
He aquí por qué es importante: PowerShell Core 6 ya no es compatible. Sus scripts aún se ejecutan, pero le faltan parches de seguridad, mejoras de rendimiento y características que hacen que valga la pena actualizar PowerShell 7.5.
¿La buena noticia? Pasar de Core 6 a 7.5 es más fácil que saltar de Windows PowerShell. La mayoría de los scripts funcionan sin cambios. Pero “la mayoría” no es “todos” y las diferencias importan.
PowerShell Core 6 fue el experimento. Demostró que PowerShell podía ejecutarse en varias plataformas, pero rompía demasiadas cosas. Las empresas se quejaron. Los guiones fallaron. Microsoft escuchó.
PowerShell 7 solucionó los problemas:
PowerShell 7.5 (estable, no LTS) se basa en .NET 9 y se admite hasta el 12 de mayo de 2026. PowerShell 7.4 (LTS) se ejecuta en .NET 8 y se admite hasta el 10 de noviembre de 2026. Consulte la Ciclo de vida de soporte de PowerShell para detalles completos.
Estos cambios afectarán sus scripts:
Desde PowerShell 6, la codificación de texto predeterminada es UTF-8 sin lista de materiales para la mayoría de los cmdlets de texto. Esto no ha cambiado en 7.5, pero especifique -Encoding explícitamente cuando la interoperabilidad lo requiera:
# Both Core 6 and 7.5 default to UTF-8 without BOM
Get-Content file.txt | Out-File output.txt
# Specify encoding when working with legacy systems
Get-Content file.txt | Out-File output.txt -Encoding UTF8BOM
Para obtener detalles completos sobre la codificación, consulte about_Character_Encoding.
Presentación de PowerShell 7 ConciseView como el visualización de error predeterminada y el nuevo Get-Error cmdlet:
# PowerShell 7.5 - Cleaner error display by default
$ErrorView = 'ConciseView' # This is the default
# Use Get-Error for detailed error information
Get-Error -Newest 5
Obtenga más información sobre el manejo de errores en about_Preference_Variables.
El Test-Connection Los nombres de los parámetros del cmdlet cambiaron por completo. El -ComputerName El parámetro de PowerShell 5.1 se convirtió en -TargetName en Núcleo 6+:
# Core 6 and 7.5 - Use -TargetName
Test-Connection -TargetName server01 -Count 2
# PowerShell 7.5 - Additional parameters available
Test-Connection -TargetName server01 -Count 2 -IPv4
Ver Documentación de prueba de conexión para todos los parámetros.
En PowerShell 7.0+, los cmdlets web admiten la configuración de proxy a través de variables de entorno y explícitas. -Proxy parámetro:
# PowerShell 7.5 - Honors proxy environment variables
$env:HTTP_PROXY = 'http://proxy:8080'
Invoke-WebRequest -Uri 'https://api.example.com'
# Or use explicit proxy
Invoke-WebRequest -Uri 'https://api.example.com' -Proxy 'http://proxy:8080'
Detalles en Documentación de Invoke-WebRequest.
Victoria rápida: operadores de cadena Reemplazar detallado
if ($?)bloques con&&y||que los operadores fallen rápidamente en los procesos de CI/CD. Ejemplo:Build-Project && Deploy-Project
PowerShell 7.x generalmente se inicia y ejecuta más rápido que Core 6 debido a mejoras en el tiempo de ejecución de .NET. En lugar de confiar en porcentajes genéricos, compare sus scripts con Measure-Command en su hardware:
# Measure startup time
Measure-Command { pwsh -Command "exit" }
# Compare ForEach-Object performance
$data = 1..100000
Measure-Command {
$data | ForEach-Object { $_ * 2 }
}
# Test parallel performance (new in PowerShell 7)
Measure-Command {
$data | ForEach-Object -Parallel { $_ * 2 } -ThrottleLimit 5
}
PowerShell 7.5 agrega funciones que no estaban en Core 6. Consulte Novedades de PowerShell 7.5 para ver la lista completa.
ForEach-Object -Parallel era introducido en PowerShell 7.0 y no existía en Core 6:
# Core 6 - Sequential processing only
$servers = Get-Content servers.txt
$servers | ForEach-Object {
Test-Connection -TargetName $_ -Count 1
}
# PowerShell 7.5 - Parallel execution
$servers | ForEach-Object -Parallel {
Test-Connection -TargetName $_ -Count 1
} -ThrottleLimit 10
Operadores de cadena de oleoductos (&& y ||) le permiten fallar rápidamente en tuberías sin detalles if ($?) bloques:
# Core 6 - Manual error checking
$result = Start-Service 'Spooler'
if ($?) {
Write-Output "Service started"
}
# PowerShell 7.5 - Chain operators
Start-Service 'Spooler' && Write-Output "Service started"
Más información: about_Pipeline_Chain_Operadores
Operadores coalescentes nulos (?? y ??=) reducir el código de verificación nula:
# Core 6 - Verbose null checking
if ($null -eq $config) {
$config = Get-DefaultConfig
}
# PowerShell 7.5 - Null coalescing assignment
$config ??= Get-DefaultConfig
Detalles: about_Assignment_Operadores
Out-GridView está disponible nuevamente en Windows en PowerShell 7+. Para escenarios multiplataforma, utilice Out-ConsoleGridView desde ConsoleGuiTools módulo:
# PowerShell 7.5 on Windows
Get-Process | Out-GridView -Title "Select Process" -PassThru
# Cross-platform alternative
Install-Module ConsoleGuiTools -Scope CurrentUser
Get-Process | Out-ConsoleGridView
Ver Documentación fuera de GridView.
PowerShell 7.5 admite más módulos que Core 6:
Estos módulos ahora funcionan con PowerShell 7 (los requisitos de versión varían):
La importación de módulos proporciona mejores mensajes de error:
# PowerShell 7.5 - Use compatibility mode for Windows-only modules
Import-Module SomeWindowsModule -UseWindowsPowerShell
Entendido: valores predeterminados de profundidad JSON
ConvertTo-JsonEl valor predeterminado es Profundidad = 2 (¡no 100!). Siempre configurado-Depthexplícitamente para evitar el truncamiento de datos:$object | ConvertTo-Json -Depth 5
En Windows, instalando PowerShell 7:
Ver Instalación de PowerShell en Windows para más detalles.
# Windows - Using winget
winget install --id Microsoft.PowerShell --exact
# Linux - Using package manager
sudo apt-get update
sudo apt-get install -y powershell
# macOS - Using Homebrew
brew install --cask powershell
$PSVersionTable.PSVersion
ConvertTo-Json por defecto es Profundidad=2 (avisa cuando se excede). ConvertFrom-Json por defecto es Profundidad=1024:
# ConvertTo-Json defaults to depth 2 - set it explicitly
$object | ConvertTo-Json -Depth 5 # Prevents truncation
# ConvertFrom-Json handles deeply nested JSON (depth 1024)
$json | ConvertFrom-Json
Referencia: Documentación de ConvertTo-Json
Las características experimentales de Core 6 cambiaron en 7.5:
# List current experimental features
Get-ExperimentalFeature
# Enable specific features
Enable-ExperimentalFeature -Name PSCommandNotFoundSuggestion
Verifique y actualice las rutas de los módulos:
# View PowerShell 7.5 module paths
$env:PSModulePath -split [IO.Path]::PathSeparator
Cree un enfoque de prueba estructurado:
Install-Module -Name PSScriptAnalyzer -Force
Invoke-ScriptAnalyzer -Path "C:\Scripts" -Recurse
$modules="Az", 'VMware.PowerCLI', 'ExchangeOnlineManagement'
$modules | ForEach-Object {
try {
Import-Module $_ -ErrorAction Stop
Write-Output "$_ loaded successfully"
} catch {
Write-Warning "$_ failed: $_"
}
}
# Benchmark in both versions
Measure-Command { & "C:\Scripts\critical-script.ps1" }
La actualización de Core 6 a PowerShell 7.5 es sencilla para la mayoría de los scripts. Comience con los entornos de desarrollo. Pruebe guiones críticos. Documente los cambios requeridos.
Recordar:
Su inversión en Core 6 no fue en vano. Demostró que PowerShell podía ser multiplataforma. Ahora, PowerShell 7.5 cumple esa promesa con mejor rendimiento, compatibilidad y soporte.
Leave a comment