Add split reports functionality

This commit is contained in:
Przemyslaw Klys
2022-07-26 21:40:33 +02:00
parent bf3ec81ea6
commit 0abde822f5
+88 -30
View File
@@ -46,6 +46,9 @@
.PARAMETER Online .PARAMETER Online
Forces report to use online resources in HTML (using CDN most of the time), by default it is run offline, and inlines all CSS/JS code. Forces report to use online resources in HTML (using CDN most of the time), by default it is run offline, and inlines all CSS/JS code.
.PARAMETER SplitReports
Split report into multiple files, one for each report. This can be useful for large domains with huge reports.
.EXAMPLE .EXAMPLE
Invoke-GPOZaurr Invoke-GPOZaurr
@@ -71,7 +74,8 @@
[alias('ForestName')][string] $Forest, [alias('ForestName')][string] $Forest,
[string[]] $ExcludeDomains, [string[]] $ExcludeDomains,
[alias('Domain', 'Domains')][string[]] $IncludeDomains, [alias('Domain', 'Domains')][string[]] $IncludeDomains,
[switch] $Online [switch] $Online,
[switch] $SplitReports
) )
Reset-GPOZaurrStatus # This makes sure types are at it's proper status Reset-GPOZaurrStatus # This makes sure types are at it's proper status
@@ -189,46 +193,100 @@
if (-not $FilePath) { if (-not $FilePath) {
$FilePath = Get-FileName -Extension 'html' -Temporary $FilePath = Get-FileName -Extension 'html' -Temporary
} }
Write-Color -Text '[i]', '[HTML ] ', "Generating HTML report ($FilePath)" -Color Yellow, DarkGray, Yellow if ($SplitReports -and $Type.Count -gt 1) {
New-HTML -Author 'Przemysław Kłys' -TitleText 'GPOZaurr Report' { # Split reports into multiple files for easier viewing
New-HTMLTabStyle -BorderRadius 0px -TextTransform capitalize -BackgroundColorActive SlateGrey $DateName = $(Get-Date -f yyyy-MM-dd_HHmmss)
New-HTMLSectionStyle -BorderRadius 0px -HeaderBackGroundColor Grey -RemoveShadow $FileName = [io.path]::GetFileNameWithoutExtension($FilePath)
New-HTMLPanelStyle -BorderRadius 0px $DirectoryName = [io.path]::GetDirectoryName($FilePath)
New-HTMLTableOption -DataStore JavaScript -BoolAsString -ArrayJoinString ', ' -ArrayJoin foreach ($T in $Script:GPOConfiguration.Keys) {
$NewFileName = $FileName + '_' + $T + "_" + $DateName + '.html'
$FilePath = [io.path]::Combine($DirectoryName, $NewFileName)
New-HTMLHeader { if ($Script:GPOConfiguration[$T].Enabled -eq $true) {
New-HTMLSection -Invisible { Write-Color -Text '[i]', '[HTML ] ', "Generating HTML report ($FilePath) for $T with split reports" -Color Yellow, DarkGray, Yellow
New-HTMLSection { New-HTML -Author 'Przemysław Kłys' -TitleText 'GPOZaurr Report' {
New-HTMLText -Text "Report generated on $(Get-Date)" -Color Blue New-HTMLTabStyle -BorderRadius 0px -TextTransform capitalize -BackgroundColorActive SlateGrey
} -JustifyContent flex-start -Invisible New-HTMLSectionStyle -BorderRadius 0px -HeaderBackGroundColor Grey -RemoveShadow
New-HTMLSection { New-HTMLPanelStyle -BorderRadius 0px
New-HTMLText -Text "GPOZaurr - $($Script:Reporting['Version'])" -Color Blue New-HTMLTableOption -DataStore JavaScript -BoolAsString -ArrayJoinString ', ' -ArrayJoin
} -JustifyContent flex-end -Invisible
}
}
if ($Type.Count -eq 1) { New-HTMLHeader {
foreach ($T in $Script:GPOConfiguration.Keys) { New-HTMLSection -Invisible {
if ($Script:GPOConfiguration[$T].Enabled -eq $true) { New-HTMLSection {
if ($Script:GPOConfiguration[$T]['Summary']) { New-HTMLText -Text "Report generated on $(Get-Date)" -Color Blue
$Script:Reporting[$T]['Summary'] = Invoke-Command -ScriptBlock $Script:GPOConfiguration[$T]['Summary'] } -JustifyContent flex-start -Invisible
New-HTMLSection {
New-HTMLText -Text "GPOZaurr - $($Script:Reporting['Version'])" -Color Blue
} -JustifyContent flex-end -Invisible
}
} }
& $Script:GPOConfiguration[$T]['Solution']
} # if ($Type.Count -eq 1) {
} # foreach ($T in $Script:GPOConfiguration.Keys) {
} else { # if ($Script:GPOConfiguration[$T].Enabled -eq $true) {
foreach ($T in $Script:GPOConfiguration.Keys) { # if ($Script:GPOConfiguration[$T]['Summary']) {
if ($Script:GPOConfiguration[$T].Enabled -eq $true) { # $Script:Reporting[$T]['Summary'] = Invoke-Command -ScriptBlock $Script:GPOConfiguration[$T]['Summary']
# }
# & $Script:GPOConfiguration[$T]['Solution']
# }
# }
# } else {
if ($Script:GPOConfiguration[$T]['Summary']) { if ($Script:GPOConfiguration[$T]['Summary']) {
$Script:Reporting[$T]['Summary'] = Invoke-Command -ScriptBlock $Script:GPOConfiguration[$T]['Summary'] $Script:Reporting[$T]['Summary'] = Invoke-Command -ScriptBlock $Script:GPOConfiguration[$T]['Summary']
} }
New-HTMLTab -Name $Script:GPOConfiguration[$T]['Name'] { New-HTMLTab -Name $Script:GPOConfiguration[$T]['Name'] {
& $Script:GPOConfiguration[$T]['Solution'] & $Script:GPOConfiguration[$T]['Solution']
} }
}
# }
} -Online:$Online.IsPresent -ShowHTML:(-not $HideHTML) -FilePath $FilePath
} }
} }
} -Online:$Online.IsPresent -ShowHTML:(-not $HideHTML) -FilePath $FilePath } else {
# Standard reports as requested
Write-Color -Text '[i]', '[HTML ] ', "Generating HTML report ($FilePath)" -Color Yellow, DarkGray, Yellow
New-HTML -Author 'Przemysław Kłys' -TitleText 'GPOZaurr Report' {
New-HTMLTabStyle -BorderRadius 0px -TextTransform capitalize -BackgroundColorActive SlateGrey
New-HTMLSectionStyle -BorderRadius 0px -HeaderBackGroundColor Grey -RemoveShadow
New-HTMLPanelStyle -BorderRadius 0px
New-HTMLTableOption -DataStore JavaScript -BoolAsString -ArrayJoinString ', ' -ArrayJoin
New-HTMLHeader {
New-HTMLSection -Invisible {
New-HTMLSection {
New-HTMLText -Text "Report generated on $(Get-Date)" -Color Blue
} -JustifyContent flex-start -Invisible
New-HTMLSection {
New-HTMLText -Text "GPOZaurr - $($Script:Reporting['Version'])" -Color Blue
} -JustifyContent flex-end -Invisible
}
}
if ($Type.Count -eq 1) {
foreach ($T in $Script:GPOConfiguration.Keys) {
if ($Script:GPOConfiguration[$T].Enabled -eq $true) {
if ($Script:GPOConfiguration[$T]['Summary']) {
$Script:Reporting[$T]['Summary'] = Invoke-Command -ScriptBlock $Script:GPOConfiguration[$T]['Summary']
}
& $Script:GPOConfiguration[$T]['Solution']
}
}
} else {
foreach ($T in $Script:GPOConfiguration.Keys) {
if ($Script:GPOConfiguration[$T].Enabled -eq $true) {
if ($Script:GPOConfiguration[$T]['Summary']) {
$Script:Reporting[$T]['Summary'] = Invoke-Command -ScriptBlock $Script:GPOConfiguration[$T]['Summary']
}
New-HTMLTab -Name $Script:GPOConfiguration[$T]['Name'] {
& $Script:GPOConfiguration[$T]['Solution']
}
}
}
}
} -Online:$Online.IsPresent -ShowHTML:(-not $HideHTML) -FilePath $FilePath
}
$TimeLogEndHTML = Stop-TimeLog -Time $TimeLogHTML -Option OneLiner $TimeLogEndHTML = Stop-TimeLog -Time $TimeLogHTML -Option OneLiner
Write-Color -Text '[i]', '[HTML ] ', 'Generating HTML report', " [Time to execute: $TimeLogEndHTML]" -Color Yellow, DarkGray, Yellow, DarkGray Write-Color -Text '[i]', '[HTML ] ', 'Generating HTML report', " [Time to execute: $TimeLogEndHTML]" -Color Yellow, DarkGray, Yellow, DarkGray
if ($PassThru) { if ($PassThru) {