(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa
PowerShell

Pester: pruebas automatizadas para scripts PowerShell e infraestructura

João Barros 12 de May de 2026 1 min de lectura

Pester es el framework de pruebas nativo de PowerShell, incluido en Windows por defecto y usado para validar scripts, módulos y configuración de infraestructura. Las pruebas con Pester hacen los scripts PowerShell production-ready.

Instalar y estructura básica

Install-Module Pester -Force -Scope CurrentUser

# Estructura de un archivo de pruebas (Get-UserInfo.Tests.ps1)
BeforeAll {
    . "$PSScriptRoot/Get-UserInfo.ps1"  # importar el script a probar
}

Describe "Get-UserInfo" {
    Context "Usuario válido" {
        It "Devuelve un objeto con DisplayName" {
            $result = Get-UserInfo -UPN "admin@empresa.com"
            $result.DisplayName | Should -Not -BeNullOrEmpty
        }
        It "Devuelve el email correcto" {
            $result = Get-UserInfo -UPN "admin@empresa.com"
            $result.Mail | Should -Be "admin@empresa.com"
        }
    }

    Context "Usuario inválido" {
        It "Lanza un error para un UPN inválido" {
            { Get-UserInfo -UPN "noexiste@empresa.com" } | Should -Throw
        }
    }
}

Mocking — aislar dependencias externas

BeforeAll { . "$PSScriptRoot/Send-Report.ps1" }

Describe "Send-Report" {
    It "Llama a Send-MailMessage con el destinatario correcto" {
        Mock Send-MailMessage { }  # no envía un email real

        Send-Report -To "gestor@empresa.com" -Subject "Informe"

        Should -Invoke Send-MailMessage -Times 1 `
            -ParameterFilter { $To -eq "gestor@empresa.com" }
    }
}

Pruebas de infraestructura Azure

Describe "Infraestructura Azure — rg-analytics-prod" {
    BeforeAll { Connect-AzAccount -Identity }

    It "La Storage Account existe" {
        Get-AzStorageAccount -ResourceGroupName "rg-analytics-prod" `
            -Name "stadatalakeprod" | Should -Not -BeNullOrEmpty
    }
    It "El Key Vault tiene soft-delete activado" {
        $kv = Get-AzKeyVault -VaultName "kv-bconcepts-prod"
        $kv.EnableSoftDelete | Should -Be $true
    }
}

Integrar en Azure DevOps

- task: PowerShell@2
  inputs:
    targetType: inline
    script: |
      Install-Module Pester -Force -Scope CurrentUser
      $result = Invoke-Pester -Path ./tests -PassThru
      if ($result.FailedCount -gt 0) { exit 1 }

Conclusión

Los scripts PowerShell sin pruebas son un riesgo en producción. Pester hace trivial escribir pruebas unitarias (con mocks para aislar APIs) y pruebas de infraestructura (para validar el estado post-deploy). Intégrelas en pipelines CI/CD para prevenir regresiones.

Compartir: