From 5d2a4725f18f6060666aad01e138518d5cc7c444 Mon Sep 17 00:00:00 2001 From: Przemyslaw Klys Date: Sun, 11 Sep 2022 22:30:55 +0200 Subject: [PATCH] move html to separate functions fix splitreports to start creating reports right away --- Private/New-HTMLReportAll.ps1 | 50 +++++++++++++++ Private/New-HTMLReportWithSplit.ps1 | 61 ++++++++++++++++++ Public/Invoke-GPOZaurr.ps1 | 98 +++-------------------------- 3 files changed, 118 insertions(+), 91 deletions(-) create mode 100644 Private/New-HTMLReportAll.ps1 create mode 100644 Private/New-HTMLReportWithSplit.ps1 diff --git a/Private/New-HTMLReportAll.ps1 b/Private/New-HTMLReportAll.ps1 new file mode 100644 index 0000000..2a8b4f0 --- /dev/null +++ b/Private/New-HTMLReportAll.ps1 @@ -0,0 +1,50 @@ +function New-HTMLReportAll { + [CmdletBinding()] + param( + [string] $FilePath, + [switch] $Online, + [switch] $HideHTML, + [Array] $Type + ) + # Standard reports as requested + Write-Color -Text '[i]', '[HTML ] ', "Generating HTML report ($FilePath)" -Color Yellow, DarkGray, Yellow + New-HTML -Author 'Przemysław Kłys @ Evotec' -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 +} \ No newline at end of file diff --git a/Private/New-HTMLReportWithSplit.ps1 b/Private/New-HTMLReportWithSplit.ps1 new file mode 100644 index 0000000..d7fb78b --- /dev/null +++ b/Private/New-HTMLReportWithSplit.ps1 @@ -0,0 +1,61 @@ +function New-HTMLReportWithSplit { + [cmdletBinding()] + param( + [string] $FilePath, + [switch] $Online, + [switch] $HideHTML, + [string] $CurrentReport + ) + + # Split reports into multiple files for easier viewing + $DateName = $(Get-Date -f yyyy-MM-dd_HHmmss) + $FileName = [io.path]::GetFileNameWithoutExtension($FilePath) + $DirectoryName = [io.path]::GetDirectoryName($FilePath) + foreach ($T in $Script:GPOConfiguration.Keys) { + $NewFileName = $FileName + '_' + $T + "_" + $DateName + '.html' + $FilePath = [io.path]::Combine($DirectoryName, $NewFileName) + + # we execute only if enabled and current report not given which means there's a single report to run + # or if current report is given and it matches the current report type which works for split reprots + if ($Script:GPOConfiguration[$T].Enabled -eq $true -and ((-not $CurrentReport) -or ($CurrentReport -and $CurrentReport -eq $T))) { + Write-Color -Text '[i]', '[HTML ] ', "Generating HTML report ($FilePath) for $T with split reports" -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 { + + 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 + } + } +} \ No newline at end of file diff --git a/Public/Invoke-GPOZaurr.ps1 b/Public/Invoke-GPOZaurr.ps1 index cf31435..5ac93e0 100644 --- a/Public/Invoke-GPOZaurr.ps1 +++ b/Public/Invoke-GPOZaurr.ps1 @@ -185,6 +185,10 @@ $TimeEndGPOList = Stop-TimeLog -Time $TimeLogGPOList -Option OneLiner $Script:Reporting[$T]['Time'] = $TimeEndGPOList Write-Color -Text '[i]', '[End ] ', $($Script:GPOConfiguration[$T]['Name']), " [Time to execute: $TimeEndGPOList]" -Color Yellow, DarkGray, Yellow, DarkGray + + if ($SplitReports) { + New-HTMLReportWithSplit -FilePath $FilePath -Online:$Online -HideHTML:$HideHTML -CurrentReport $T + } } } @@ -193,98 +197,10 @@ if (-not $FilePath) { $FilePath = Get-FileName -Extension 'html' -Temporary } - if ($SplitReports -and $Type.Count -gt 1) { - # Split reports into multiple files for easier viewing - $DateName = $(Get-Date -f yyyy-MM-dd_HHmmss) - $FileName = [io.path]::GetFileNameWithoutExtension($FilePath) - $DirectoryName = [io.path]::GetDirectoryName($FilePath) - foreach ($T in $Script:GPOConfiguration.Keys) { - $NewFileName = $FileName + '_' + $T + "_" + $DateName + '.html' - $FilePath = [io.path]::Combine($DirectoryName, $NewFileName) - - if ($Script:GPOConfiguration[$T].Enabled -eq $true) { - Write-Color -Text '[i]', '[HTML ] ', "Generating HTML report ($FilePath) for $T with split reports" -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 { - - 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 - } - } + if ($Type.Count -gt 1 -and -not $SplitReports) { + New-HTMLReportWithSplit -FilePath $FilePath -Online:$Online -HideHTML:$HideHTML } 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 + New-HTMLReportAll -FilePath $FilePath -Online:$Online -HideHTML:$HideHTML -Type $Type } $TimeLogEndHTML = Stop-TimeLog -Time $TimeLogHTML -Option OneLiner