Private/Generate-Output.ps1

function Generate-Output {
    <#
    .SYNOPSIS
    Exports the complete Windows Virtual Desktop environment, based on the hostpool name.
    .DESCRIPTION
    The function will help you exporting the complete AVD environment to common output types as HTML and CSV.
    .PARAMETER HostpoolName
    Enter the AVD hostpoolname name.
    .PARAMETER ResourceGroupName
    Enter the AVD hostpool resource group name.
    .PARAMETER
    .EXAMPLE
    Export-AVDConfig -Hostpoolname $hostpoolName -resourceGroup $ResourceGroup -Scope Hostpool,SessionHosts -Verbose -FilePath .\AVDexport.html
    Add a comment to existing incidnet
    #>

    
    [CmdletBinding(DefaultParameterSetName = 'Hostpool')]
    param (
        [parameter(Mandatory)]
        [string]$FileName,

        [parameter(Mandatory)]
        [ValidateSet("JSON", "HTML", "XLSX")]
        [array]$Format,

        [parameter(Mandatory)]
        [hashtable]$Content,

        [parameter(Mandatory)]
        [string]$HostpoolName
    )

    Begin {
        
    }
    Process {
        $FilePath = ".\$FileName.$($Format.tolower())"
        switch ($Format) {
            HTML {
                $ExportBody = [System.Collections.Generic.List[object]]::new()
                $Content.Values | foreach { $ExportBody.Add(($_ | ConvertTo-Html -Fragment -PreContent "<p>$($_.Name) information for $HostpoolName</p>")) }
                $Css = Get-Content -Path "$PSScriptRoot\..\Private\exportconfig.css" -Raw
                $ExportBody = $ExportBody -replace '<td>0</td>', '<td class="WrongStatus">False</td>'
                $Logo = '<link rel="shortcut icon" href="./Private/AVD-logo.png" />'
                $style = ("<style>`n") + $Css + ("`n</style>")
                $HtmlParameters = @{
                    Title       = "AVD Information Report"
                    body        = $ExportBody
                    Head        = $Logo + $style
                    PostContent = "<H5><i>$(get-date)</i></H5>"
                }
                ConvertTo-Html @HtmlParameters | Out-File -FilePath $FilePath
            }
            XLSX {
                if ($null -eq (Get-Module -ListAvailable -Name ImportExcel)) { Install-Module -Name ImportExcel }
                Import-Module ImportExcel
                Remove-Item $FilePath -ErrorAction SilentlyContinue
                # Header Spacing
                $HeaderSpacing = 1
                $ContentSpacing = 2
                $Headers = @{}
                $HeaderLocation,$Rows, $ReportContent = $null
                $Content.GetEnumerator() | foreach {
                    $Resource = $_.Key
                    $HeaderLocation = ($ReportContent + $Rows + $ContentSpacing)
                    $Rows = $Rows + $Content.Get_Item($Resource).Count
                    $ReportContent = $HeaderSpacing + $HeaderLocation    
                    $Headers.Add($Resource, $("A" + $HeaderLocation))
                    $Content.Get_Item($Resource) | Export-Excel $FilePath -AutoSize -StartRow $ReportContent -TableName $Resource  
                }
                # Directory Listing
                $excel = Get-Date | Export-Excel $FilePath -AutoSize -StartRow 1 -PassThru
                # Get the sheet named Sheet1
                $ws = $excel.Workbook.Worksheets['Sheet1']
                # Create a hashtable with a few properties
                # that you'll splat on Set-Format
                $xlParams = @{WorkSheet = $ws; Bold = $true; FontSize = 18; AutoSize = $true }
                $Headers.GetEnumerator() | foreach { 
                    # Create the headings in the Excel worksheet
                    Set-Format -Range $_.Value -Value $_.Key @xlParams
                }
                # Close and Save the changes to the Excel file
                # Launch the Excel file using the -Show switch
                Close-ExcelPackage $excel
            }
            JSON {
                $ExportBody.Add(($Content | ConvertTo-Json -Depth 99))
                $ExportBody | Out-File -FilePath $FilePath
            }
            Console {
                return $Content
            }
        }
    }
    End {

    }
}