Ejemplo real: usando PSScriptAnalyzer para mejorar un script de PowerShell
💠 Ejemplo real: usando PSScriptAnalyzer para mejorar un script de PowerShell
PSScriptAnalyzer es una herramienta oficial de Microsoft que analiza scripts de PowerShell en busca de errores, malas prácticas y problemas de estilo o rendimiento. Es una forma rápida y eficaz de garantizar la calidad de tu código.
📜 Script original con problemas
# backup.ps1
param($source, $destination)
if (!(Test-Path $destination)) {
New-Item -ItemType Directory -Path $destination
}
Copy-Item $source $destination -Recurse
Write-Host "Copia completada de $source a $destination"
A simple vista, parece correcto, pero veamos qué ocurre al analizarlo.
🧩 Paso 1: Ejecutar el analizador
Install-Module PSScriptAnalyzer -Scope CurrentUser
Invoke-ScriptAnalyzer -Path .\backup.ps1
Salida del análisis:
RuleName Message
-------- -------
PSAvoidUsingWriteHost Avoid using Write-Host, use Write-Output instead.
PSUseApprovedVerbs The cmdlet 'Copy-Item' uses an unapproved verb.
PSUseConsistentWhitespace Use consistent indentation and spacing.
El analizador detecta malas prácticas y sugiere mejoras para aumentar la calidad y coherencia del script.
🛠️ Paso 2: Corregimos el script según las sugerencias
# backup_fixed.ps1
[CmdletBinding()]
param(
[Parameter(Mandatory)]
[string]$Source,
[Parameter(Mandatory)]
[string]$Destination
)
if (-not (Test-Path -Path $Destination)) {
New-Item -ItemType Directory -Path $Destination | Out-Null
}
Copy-Item -Path $Source -Destination $Destination -Recurse
Write-Output "Copia completada de $Source a $Destination"
En esta versión mejorada:
- Se usa
Write-Outputen lugar deWrite-Host. - Se declaran correctamente los parámetros con
[CmdletBinding()]. - Se mejora la legibilidad, la validación y la coherencia del código.
⚙️ Paso 3: Verificamos de nuevo
Invoke-ScriptAnalyzer -Path .\backup_fixed.ps1
Salida:
No issues found.
🎉 ¡Perfecto! El script ahora cumple con todas las reglas recomendadas por PSScriptAnalyzer.
💡 Bonus: Analizar todos tus scripts automáticamente
Puedes analizar en lote todos los scripts .ps1 de un directorio:
Get-ChildItem -Path .\Scripts -Filter *.ps1 -Recurse |
ForEach-Object { Invoke-ScriptAnalyzer -Path $_.FullName }
Así garantizas la calidad de todo tu código antes de publicarlo o desplegarlo.
📦 Conclusión
Con PSScriptAnalyzer puedes detectar problemas de estilo, rendimiento y seguridad en tus scripts de PowerShell, mejorar su calidad y automatizar su análisis dentro de tus pipelines DevOps. Es una herramienta imprescindible para cualquier desarrollador o administrador que busque escribir código limpio y profesional.
#PowerShell #DevOps #Scripting #Automatización #PSScriptAnalyzer #BuenasPrácticas