Private/_New-HtmlReport.ps1

function _New-HtmlReport {
    <#
    .SYNOPSIS
        Generates a styled HTML report from a collection of objects.
    #>

    [CmdletBinding()]
    param(
        [string]$Title,
        [array]$Data,
        [datetime]$GeneratedDate
    )

    $css = @"
    <style>
        body { font-family: Segoe UI, Arial, sans-serif; margin: 20px; background: #f5f5f5; }
        h1 { color: #2c3e50; border-bottom: 3px solid #3498db; padding-bottom: 10px; }
        .meta { color: #7f8c8d; margin-bottom: 20px; }
        .summary { background: #fff; padding: 15px; border-radius: 5px; margin-bottom: 20px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
        .summary span { font-weight: bold; margin-right: 30px; }
        table { border-collapse: collapse; width: 100%; background: #fff; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
        th { background: #2c3e50; color: #fff; padding: 10px 8px; text-align: left; font-size: 11px; }
        td { padding: 8px; border-bottom: 1px solid #ecf0f1; font-size: 11px; }
        tr:nth-child(even) { background: #f9f9f9; }
        tr:hover { background: #eaf2f8; }
        .inactive { color: #e74c3c; font-weight: bold; }
        .disabled { color: #95a5a6; }
    </style>
"@


    $totalUsers = $Data.Count
    $activeUsers = @($Data | Where-Object { $_.Enabled -eq $true }).Count
    $inactiveUsers = @($Data | Where-Object { $_.Inactive -eq $true }).Count
    $disabledUsers = @($Data | Where-Object { $_.Enabled -eq $false }).Count

    $tableRows = foreach ($row in $Data) {
        $rowClass = if (-not $row.Enabled) { ' class="disabled"' }
                    elseif ($row.Inactive) { ' class="inactive"' }
                    else { '' }

        "<tr$rowClass>
            <td>$($row.SAMAccountName)</td>
            <td>$($row.DisplayName)</td>
            <td>$($row.Department)</td>
            <td>$($row.Title)</td>
            <td>$($row.Email)</td>
            <td>$($row.Enabled)</td>
            <td>$($row.LastLogon)</td>
            <td>$($row.PasswordLastSet)</td>
            <td>$($row.Manager)</td>
        </tr>"

    }

    @"
<!DOCTYPE html>
<html>
<head><title>$Title</title>$css</head>
<body>
    <h1>$Title</h1>
    <div class="meta">Generated: $($GeneratedDate.ToString('yyyy-MM-dd HH:mm')) by $env:USERNAME</div>
    <div class="summary">
        <span>Total: $totalUsers</span>
        <span>Active: $activeUsers</span>
        <span>Inactive (90+ days): $inactiveUsers</span>
        <span>Disabled: $disabledUsers</span>
    </div>
    <table>
        <tr>
            <th>SAMAccountName</th><th>Display Name</th><th>Department</th>
            <th>Title</th><th>Email</th><th>Enabled</th>
            <th>Last Logon</th><th>Password Set</th><th>Manager</th>
        </tr>
        $($tableRows -join "`n")
    </table>
</body>
</html>
"@

}