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> "@ } |