Private/Add-TechCareResult.ps1

function Add-TechCareResult {
    <#
    .SYNOPSIS
        Anade el resultado de un modulo al estado de la ejecucion y lo devuelve.
    .DESCRIPTION
        El informe final se construye solo con lo que pase por aqui, de modo que un
        modulo que no registre su resultado no aparece en el informe.
    #>

    [CmdletBinding()]
    [OutputType([pscustomobject])]
    param(
        [Parameter(Mandatory)]
        [ValidateSet('Diagnose', 'Repair', 'Update', 'Cleanup', 'Performance', 'Security', 'Report')]
        [string]$Module,

        [ValidateSet('Green', 'Yellow', 'Red', 'Gray')]
        [string]$Status = 'Gray',

        [AllowEmptyCollection()]
        [string[]]$Findings = @(),

        [AllowEmptyCollection()]
        [string[]]$Actions = @(),

        [AllowEmptyCollection()]
        [string[]]$Recommendations = @(),

        [int64]$SpaceFreedBytes = 0
    )

    $result = [pscustomobject]@{
        Module          = $Module
        Status          = $Status
        Findings        = $Findings
        Actions         = $Actions
        Recommendations = $Recommendations
        SpaceFreedBytes = $SpaceFreedBytes
        TimeUtc         = (Get-Date).ToUniversalTime().ToString('s') + 'Z'
    }
    [void]$script:State.Results.Add($result)
    return $result
}