TechCare.psm1

#Requires -Version 5.1

# StrictMode convierte en error las referencias a variables o propiedades que no
# existen. En un modulo que lee WMI, el registro y la salida de binarios ajenos,
# una propiedad ausente es el fallo mas probable, y preferimos que grite a que
# devuelva $null y acabe en un informe que dice "Correcto".
Set-StrictMode -Version 3.0
$ErrorActionPreference = 'Stop'

$script:ModuleRoot    = $PSScriptRoot
$script:ModuleVersion = '0.1.0'

# Mensaje unico de guarda de plataforma: todas las funciones que llaman a APIs de
# Windows lo reutilizan para que el usuario de Linux o macOS lea siempre lo mismo.
$script:PlatformMessage = 'TechCare solo puede ejecutarse en Windows 10 u 11. El paquete se instala en Linux y macOS, pero el motor depende de DISM, sfc, chkdsk, Defender, el firewall y Windows Update, que son APIs de Windows. Desde Linux, macOS o movil, usa SSH o WinRM contra un equipo Windows.'

$script:State = $null

foreach ($folder in @('Private', 'Public')) {
    $dir = Join-Path -Path $PSScriptRoot -ChildPath $folder
    if (Test-Path -LiteralPath $dir) {
        Get-ChildItem -LiteralPath $dir -Filter '*.ps1' -File |
            Sort-Object -Property Name |
            ForEach-Object { . $_.FullName }
    }
}

# El estado arranca inicializado para que importar el modulo y llamar a un cmdlet
# suelto (sin pasar por Invoke-TechCare) funcione igual que dentro de una pasada.
Initialize-TechCareState

$publicDir = Join-Path -Path $PSScriptRoot -ChildPath 'Public'
$export = @(Get-ChildItem -LiteralPath $publicDir -Filter '*.ps1' -File | ForEach-Object { $_.BaseName })
Export-ModuleMember -Function $export