Public/Test-TechCarePrerequisite.ps1

function Test-TechCarePrerequisite {
    <#
    .SYNOPSIS
        Comprueba plataforma, privilegios y estado de administracion del equipo.
    .DESCRIPTION
        Es el unico cmdlet que puede ejecutarse en cualquier sistema operativo sin
        error: su trabajo es precisamente decir si el resto puede ejecutarse. Fuera
        de Windows devuelve IsWindows en falso y una razon legible.
    .EXAMPLE
        Test-TechCarePrerequisite

        Muestra si la sesion es elevada y si el equipo esta gestionado.
    .EXAMPLE
        if (-not (Test-TechCarePrerequisite).IsAdmin) { 'Relanza como administrador' }

        Comprobacion previa antes de automatizar una pasada con -Apply.
    .OUTPUTS
        PSCustomObject
    .LINK
        https://github.com/earbona23/TechCare
    #>

    [CmdletBinding()]
    [OutputType([pscustomobject])]
    param()

    $isWindowsHost = Test-TechCarePlatform
    $isAdmin       = Test-TechCareAdmin
    $managed       = [string[]]@()
    $osCaption     = ''
    $osBuild       = 0
    $supported     = $false

    if ($isWindowsHost) {
        $managed = @(Get-TechCareManagedState)
        try {
            $os        = Get-CimInstance -ClassName Win32_OperatingSystem -ErrorAction Stop
            $osCaption = [string]$os.Caption
            $osBuild   = [int]$os.BuildNumber
            # 10240 es la primera compilacion de Windows 10; por debajo de ella el
            # modulo se ejecuta pero DISM y winget no se comportan igual.
            $supported = ($osBuild -ge 10240)
        } catch {
            $osCaption = 'No se pudo leer la version del sistema: ' + $_.Exception.Message
        }
    }

    $relaunch = ''
    if ($isWindowsHost -and -not $isAdmin) {
        $shell = 'pwsh'
        if ($PSVersionTable.PSEdition -eq 'Desktop') { $shell = 'powershell' }
        $relaunch = 'Start-Process {0} -Verb RunAs -ArgumentList ''-NoExit -Command "Import-Module TechCare; Invoke-TechCare"''' -f $shell
    }

    return [pscustomobject]@{
        IsWindows         = $isWindowsHost
        IsAdmin           = $isAdmin
        IsSupportedWindows = $supported
        OSCaption         = $osCaption
        OSBuild           = $osBuild
        IsManaged         = ($managed.Count -gt 0)
        ManagedReasons    = $managed
        RelaunchCommand   = $relaunch
        PSVersion         = $PSVersionTable.PSVersion.ToString()
        PSEdition         = $PSVersionTable.PSEdition
        ModuleVersion     = $script:ModuleVersion
    }
}