Src/Private/Report/Get-AbrADReportBrief.ps1

function Get-AbrADReportBrief {
    <#
    .SYNOPSIS
    Used by As Built Report to generate a one-page report brief for Microsoft Active Directory.
    .DESCRIPTION
        Documents the configuration of Microsoft AD in Word/HTML/Text formats using PScribo.
    .NOTES
        Version: 0.9.0
        Author: Jonathan Colon
        Twitter: @jcolonfzenpr
        GitHub: rebelinux
        Credits: Iain Brighton (@iainbrighton) - PScribo module
 
    .LINK
        https://github.com/AsBuiltReport/AsBuiltReport.Microsoft.AD
    #>

    [CmdletBinding()]
    param (

    )

    begin {
        Write-PScriboMessage -Message ($reportTranslate.GetAbrADReportBrief.Collecting -f $ForestInfo)
        Show-AbrDebugExecutionTime -Start -TitleMessage 'Report Brief'
    }

    process {
        try {
            Section -Style Heading1 $reportTranslate.GetAbrADReportBrief.ReportBrief -ExcludeFromTOC {
                Paragraph $reportTranslate.GetAbrADReportBrief.ReportBriefParagraph
                BlankLine

                # Report Overview
                try {
                    $inObj = [ordered] @{
                        $reportTranslate.GetAbrADReportBrief.CompanyName = $AsBuiltConfig.Company.FullName
                        $reportTranslate.GetAbrADReportBrief.CompanyContact = $AsBuiltConfig.Company.Contact
                        $reportTranslate.GetAbrADReportBrief.CompanyEmail = $AsBuiltConfig.Company.Email
                        $reportTranslate.GetAbrADReportBrief.TargetForest = $ForestInfo
                        $reportTranslate.GetAbrADReportBrief.GeneratedOn = (Get-Date -Format 'yyyy-MM-dd HH:mm:ss')
                    }
                    $OutObj = [pscustomobject]$inObj

                    $TableParams = @{
                        Name = "$($reportTranslate.GetAbrADReportBrief.ReportOverview) - $ForestInfo"
                        List = $true
                        ColumnWidths = 40, 60
                    }
                    if ($Report.ShowTableCaptions) {
                        $TableParams['Caption'] = "- $($TableParams.Name)"
                    }
                    $OutObj | Table @TableParams
                } catch {
                    Write-PScriboMessage -IsWarning -Message "$($_.Exception.Message) (Report Brief - Report Overview)"
                }

                BlankLine

                # Forest Summary
                try {
                    $inObj = [ordered] @{
                        $reportTranslate.GetAbrADReportBrief.ForestName = $ADSystem.Name
                        $reportTranslate.GetAbrADReportBrief.ForestMode = $ADSystem.ForestMode
                        $reportTranslate.GetAbrADReportBrief.RootDomain = $ADSystem.RootDomain
                        $reportTranslate.GetAbrADReportBrief.TotalDomains = ($ADSystem.Domains | Measure-Object).Count
                        $reportTranslate.GetAbrADReportBrief.TotalSites = ($ADSystem.Sites | Measure-Object).Count
                        $reportTranslate.GetAbrADReportBrief.TotalGlobalCatalogs = ($ADSystem.GlobalCatalogs | Measure-Object).Count
                        $reportTranslate.GetAbrADReportBrief.TotalUPNSuffixes = if ($ADSystem.UPNSuffixes) { ($ADSystem.UPNSuffixes | Measure-Object).Count } else { 0 }
                    }
                    $OutObj = [pscustomobject]$inObj

                    $TableParams = @{
                        Name = "$($reportTranslate.GetAbrADReportBrief.ForestSummary) - $ForestInfo"
                        List = $true
                        ColumnWidths = 40, 60
                    }
                    if ($Report.ShowTableCaptions) {
                        $TableParams['Caption'] = "- $($TableParams.Name)"
                    }
                    $OutObj | Table @TableParams
                } catch {
                    Write-PScriboMessage -IsWarning -Message "$($_.Exception.Message) (Report Brief - Forest Summary)"
                }

                BlankLine

                # Domain Summary
                try {
                    $OutObj = [System.Collections.Generic.List[object]]::new()
                    foreach ($Domain in $OrderedDomains) {
                        try {
                            $DomainInfo = Invoke-CommandWithTimeout -Session $TempPssSession -ScriptBlock {
                                Get-ADDomain -Identity $using:Domain -ErrorAction Stop
                            }
                            $DCCount = Invoke-CommandWithTimeout -Session $TempPssSession -ScriptBlock {
                                (Get-ADDomainController -Filter * -Server $using:Domain -ErrorAction Stop | Measure-Object).Count
                            }
                            $inObj = [ordered] @{
                                $reportTranslate.GetAbrADReportBrief.DomainName = $DomainInfo.DNSRoot
                                $reportTranslate.GetAbrADReportBrief.DomainMode = $DomainInfo.DomainMode
                                $reportTranslate.GetAbrADReportBrief.DomainControllers = $DCCount
                                $reportTranslate.GetAbrADReportBrief.PDCEmulator = $DomainInfo.PDCEmulator
                            }
                            $OutObj.Add([pscustomobject]$inObj)
                        } catch {
                            Write-PScriboMessage -IsWarning -Message "$($_.Exception.Message) (Report Brief - Domain Summary - $Domain)"
                        }
                    }

                    if ($OutObj) {
                        $TableParams = @{
                            Name = "$($reportTranslate.GetAbrADReportBrief.DomainSummary) - $ForestInfo"
                            List = $false
                            Headers = $reportTranslate.GetAbrADReportBrief.DomainName, $reportTranslate.GetAbrADReportBrief.DomainMode, $reportTranslate.GetAbrADReportBrief.DomainControllers, $reportTranslate.GetAbrADReportBrief.PDCEmulator
                            Columns = $reportTranslate.GetAbrADReportBrief.DomainName, $reportTranslate.GetAbrADReportBrief.DomainMode, $reportTranslate.GetAbrADReportBrief.DomainControllers, $reportTranslate.GetAbrADReportBrief.PDCEmulator
                            ColumnWidths = 25, 25, 15, 35
                        }
                        if ($Report.ShowTableCaptions) {
                            $TableParams['Caption'] = "- $($TableParams.Name)"
                        }
                        $OutObj | Table @TableParams
                    }
                } catch {
                    Write-PScriboMessage -IsWarning -Message "$($_.Exception.Message) (Report Brief - Domain Summary)"
                }

                BlankLine

                # Report Scope
                try {
                    $OutObj = [System.Collections.Generic.List[object]]::new()
                    $ScopeMap = [ordered] @{
                        $reportTranslate.GetAbrADReportBrief.ScopeForest = $InfoLevel.Forest
                        $reportTranslate.GetAbrADReportBrief.ScopeDomain = $InfoLevel.Domain
                        $reportTranslate.GetAbrADReportBrief.ScopeDNS = $InfoLevel.DNS
                    }

                    foreach ($Entry in $ScopeMap.GetEnumerator()) {
                        $StatusText = switch ($Entry.Value) {
                            0 { $reportTranslate.GetAbrADReportBrief.ScopeDisabled }
                            1 { $reportTranslate.GetAbrADReportBrief.ScopeEnabled }
                            2 { $reportTranslate.GetAbrADReportBrief.ScopeAdvanced }
                            3 { $reportTranslate.GetAbrADReportBrief.ScopeDetailed }
                            default { "$($reportTranslate.GetAbrADReportBrief.ScopeEnabled) (Level $($Entry.Value))" }
                        }
                        $inObj = [ordered] @{
                            $reportTranslate.GetAbrADReportBrief.Section = $Entry.Key
                            $reportTranslate.GetAbrADReportBrief.DetailLevel = $StatusText
                        }
                        $OutObj.Add([pscustomobject]$inObj)
                    }

                    $TableParams = @{
                        Name = "$($reportTranslate.GetAbrADReportBrief.ReportScope) - $ForestInfo"
                        List = $false
                        Headers = $reportTranslate.GetAbrADReportBrief.Section, $reportTranslate.GetAbrADReportBrief.DetailLevel
                        Columns = $reportTranslate.GetAbrADReportBrief.Section, $reportTranslate.GetAbrADReportBrief.DetailLevel
                        ColumnWidths = 60, 40
                    }
                    if ($Report.ShowTableCaptions) {
                        $TableParams['Caption'] = "- $($TableParams.Name)"
                    }
                    $OutObj | Table @TableParams
                } catch {
                    Write-PScriboMessage -IsWarning -Message "$($_.Exception.Message) (Report Brief - Report Scope)"
                }
            }
            PageBreak
        } catch {
            Write-PScriboMessage -IsWarning -Message "$($_.Exception.Message) (Report Brief Section)"
        }
    }

    end {
        Show-AbrDebugExecutionTime -End -TitleMessage 'Report Brief'
    }
}