# ATAP Html Report

## Overview

A module part of the *Audit Test Automation Package* that creates html reports with tables and sections for audit reporting.

## Requirements

Please make sure, that following requirements are fulfilled:

* **PowerShell 5.1:** To find out the current version use `$PSVersionTable.PSVersion`.

## Installation

It is recommended that you install the module on your system. 

1. Findout out where PowerShell stores modules with `$env:PSModulePath`. For example, this folder might be C:\Users\Administrator\Documents\WindowsPowerShell\Modules.
2. Copy this folder into the modules folder
3. Check with `Get-Module ATAPHtmlReport -ListAvailable` if PowerShell detects the module.

## Usage

To generate a report, use `Get-ATAPHtmlReport`. However, you will need to provide the *path* where the report will be stored, the report *title*, the audit *module name*, and what hardening standard it is *based on*. To give the report a little bit more context, about the computer the report was generated on, you can provide your own *host information* (a table at the beginning of the report).

The main content of the report is structured into *sections*. A section must have a *title*, but can also include a *description*, a table of *AuditInfos*, and *SubSections*. AuditInfos represent a single audit test with an *Id*, *Task*, *Message*, and *Audit* that states whether the the system completed the test with True, False, Warning, or None.

**Important**: To use the AuditInfos class defined in the modul, you need to add `using module ATAPHtmlReport` to the top of the file. This might not work if the module is not in a PSModulePath location.

For example, a simple section could look like this:

```powershell
[hashtable[]]$reportSections = @()

$reportSections += @{
    Title = "Section 1"
    Description = "All tests from section 1 of the my audit benchmark are here"
    AuditInfos = @(
        (New-Object -TypeName AuditInfo -Property @{
            Id      = "1.1"
            Task    = "Ensure something is set"
            Message = "All Good"
            Audit   = [AuditStatus]::True
        }),
        (New-Object -TypeName AuditInfo -Property @{
            Id      = "1.2"
            Task    = "Ensure something else is set"
            Message = "Result could be better"
            Audit   = [AuditStatus]::Warning
        })
    )
}
```

A more complicated section could look like this.

```powershell
$reportSections += @{
    Title = "Section 2"
    SubSections = @(
        @{
            Title = "First subsection of section 2"
            AuditInfos = @(
                (New-Object -TypeName AuditInfo -Property @{
                    Id      = "2.1.1"
                    Task    = "Ensure something"
                    Message = "Not entirely false"
                    Audit   = [AuditStatus]::Warning
                }),
                (New-Object -TypeName AuditInfo -Property @{
                    Id      = "2.1.2"
                    Task    = "Ensure something entirely different"
                    Message = "All good"
                    Audit   = [AuditStatus]::True
                })
            )
        },
        @{
            Title = "Second subsection of section 2"
            AuditInfos = @(
                (New-Object -TypeName AuditInfo -Property @{
                    Id      = "2.2.1"
                    Task    = "Ensure something way different"
                    Message = "Oops, something went wrong!"
                    Audit   = [AuditStatus]::False
                })
            )
        }
    )
}
```

Tied up, the full usage of the `Get-ATAPHtmlReport` function could look like this:

```powershell
Get-ATAPHtmlReport `
    -Path $Path `
    -Title "My Audit Benchmark" `
    -ModuleName "MyAuditBenchmark" `
    -BasedOn "My Audit Benchmarks Benchmark vX.X.X.X" `
    -HostInformation (Get-MyHostInformation) `
    -Sections $reportSections
```

## Troubleshooting
Using `Import-Module` instead of installing might not work. Please follow the outlined steps above.
