From 2a92c90b0ccfd7152b0f480277db3f59b8278594 Mon Sep 17 00:00:00 2001 From: Przemyslaw Klys Date: Sat, 7 Nov 2020 16:07:00 +0100 Subject: [PATCH] Update --- Private/Export-GPOZaurr.ps1 | 19 ---- Private/Invoke.GPOZaurrAnalysis.ps1 | 4 +- Private/Invoke.GPOZaurrBlockedInheritance.ps1 | 2 +- Private/Invoke.GPOZaurrConsistency.ps1 | 42 ++++----- Private/Invoke.GPOZaurrDuplicate.ps1 | 2 +- Private/Invoke.GPOZaurrFiles.ps1 | 2 +- Private/Invoke.GPOZaurrList.ps1 | 86 +++++++++---------- .../Invoke.GPOZaurrNetLogonPermissions.ps1 | 60 ++++++------- Private/Invoke.GPOZaurrOrphans.ps1 | 32 +++---- Private/Invoke.GPOZaurrOwners.ps1 | 54 ++++++------ Private/Invoke.GPOZaurrPassword.ps1 | 2 +- Private/Invoke.GPOZaurrPermissions.ps1 | 2 +- Private/Invoke.GPOZaurrPermissionsRoot.ps1 | 2 +- Private/Invoke.GPOZaurrSysVolLegacyFiles.ps1 | 2 +- Private/Reset-GPOZaurrStatus.ps1 | 10 +-- Public/Invoke-GPOZaurr.ps1 | 20 +++-- 16 files changed, 163 insertions(+), 178 deletions(-) delete mode 100644 Private/Export-GPOZaurr.ps1 diff --git a/Private/Export-GPOZaurr.ps1 b/Private/Export-GPOZaurr.ps1 deleted file mode 100644 index 596bbfc..0000000 --- a/Private/Export-GPOZaurr.ps1 +++ /dev/null @@ -1,19 +0,0 @@ -function Export-GPOZaurr { - [cmdletBinding()] - param( - - ) - $Output = [ordered] @{} - foreach ($T in $Script:GPOConfiguration.Keys) { - if ($Script:GPOConfiguration[$T].Enabled -eq $true) { - $Output[$T] = [ordered]@{ - Action = $Script:GPOConfiguration[$T].Action - Data = $Script:GPOConfiguration[$T].Data - Name = $Script:GPOConfiguration[$T].Name - Summary = $Script:GPOConfiguration[$T].Summary - Variables = $Script:GPOConfiguration[$T].Variables - } - } - } - $Output -} \ No newline at end of file diff --git a/Private/Invoke.GPOZaurrAnalysis.ps1 b/Private/Invoke.GPOZaurrAnalysis.ps1 index b5cdd60..cba899b 100644 --- a/Private/Invoke.GPOZaurrAnalysis.ps1 +++ b/Private/Invoke.GPOZaurrAnalysis.ps1 @@ -16,9 +16,9 @@ } Solution = { - foreach ($Key in $Script:GPOConfiguration['GPOAnalysis']['Data'].Keys) { + foreach ($Key in $Script:Reporting['GPOAnalysis']['Data'].Keys) { New-HTMLTab -Name $Key { - New-HTMLTable -DataTable $Script:GPOConfiguration['GPOAnalysis']['Data'][$Key] -Filtering -Title $Key + New-HTMLTable -DataTable $Script:Reporting['GPOAnalysis']['Data'][$Key] -Filtering -Title $Key } } } diff --git a/Private/Invoke.GPOZaurrBlockedInheritance.ps1 b/Private/Invoke.GPOZaurrBlockedInheritance.ps1 index 1257583..36b4480 100644 --- a/Private/Invoke.GPOZaurrBlockedInheritance.ps1 +++ b/Private/Invoke.GPOZaurrBlockedInheritance.ps1 @@ -16,6 +16,6 @@ } Solution = { - New-HTMLTable -DataTable $Script:GPOConfiguration['GPOBlockedInheritance']['Data'] -Filtering + New-HTMLTable -DataTable $Script:Reporting['GPOBlockedInheritance']['Data'] -Filtering } } \ No newline at end of file diff --git a/Private/Invoke.GPOZaurrConsistency.ps1 b/Private/Invoke.GPOZaurrConsistency.ps1 index 97840cb..ce2dcd2 100644 --- a/Private/Invoke.GPOZaurrConsistency.ps1 +++ b/Private/Invoke.GPOZaurrConsistency.ps1 @@ -5,22 +5,22 @@ Data = $null Execute = { Get-GPOZaurrPermissionConsistency -Type All -VerifyInheritance } Processing = { - foreach ($GPO in $Script:GPOConfiguration['GPOConsistency']['Data']) { + foreach ($GPO in $Script:Reporting['GPOConsistency']['Data']) { if ($GPO.ACLConsistent -eq $true) { - $Script:GPOConfiguration['GPOConsistency']['Variables']['Consistent']++ + $Script:Reporting['GPOConsistency']['Variables']['Consistent']++ } else { - $Script:GPOConfiguration['GPOConsistency']['Variables']['Inconsistent']++ + $Script:Reporting['GPOConsistency']['Variables']['Inconsistent']++ } if ($GPO.ACLConsistentInside -eq $true) { - $Script:GPOConfiguration['GPOConsistency']['Variables']['ConsistentInside']++ + $Script:Reporting['GPOConsistency']['Variables']['ConsistentInside']++ } else { - $Script:GPOConfiguration['GPOConsistency']['Variables']['InconsistentInside']++ + $Script:Reporting['GPOConsistency']['Variables']['InconsistentInside']++ } } - if ($Script:GPOConfiguration['GPOConsistency']['Variables']['Inconsistent'].Count -gt 0 -or $Script:GPOConfiguration['GPOConsistency']['Variables']['InconsistentInside'].Count -gt 0 ) { - $Script:GPOConfiguration['GPOConsistency']['Action'] = $true + if ($Script:Reporting['GPOConsistency']['Variables']['Inconsistent'].Count -gt 0 -or $Script:Reporting['GPOConsistency']['Variables']['InconsistentInside'].Count -gt 0 ) { + $Script:Reporting['GPOConsistency']['Action'] = $true } else { - $Script:GPOConfiguration['GPOConsistency']['Action'] = $false + $Script:Reporting['GPOConsistency']['Action'] = $false } } Variables = @{ @@ -33,18 +33,18 @@ New-HTMLPanel { New-HTMLText -Text 'Following chart presents ', 'permissions consistency between Active Directory and SYSVOL for Group Policies' -FontSize 10pt -FontWeight normal, bold New-HTMLList -Type Unordered { - New-HTMLListItem -Text 'Top level permissions consistency: ', $Script:GPOConfiguration['GPOConsistency']['Variables']['Consistent'] -FontWeight normal, bold - New-HTMLListItem -Text 'Inherited permissions consistency: ', $Script:GPOConfiguration['GPOConsistency']['Variables']['ConsistentInside'] -FontWeight normal, bold - New-HTMLListItem -Text 'Inconsistent top level permissions: ', $Script:GPOConfiguration['GPOConsistency']['Variables']['Inconsistent'] -FontWeight normal, bold - New-HTMLListItem -Text "Inconsistent inherited permissions: ", $Script:GPOConfiguration['GPOConsistency']['Variables']['InconsistentInside'] -FontWeight normal, bold + New-HTMLListItem -Text 'Top level permissions consistency: ', $Script:Reporting['GPOConsistency']['Variables']['Consistent'] -FontWeight normal, bold + New-HTMLListItem -Text 'Inherited permissions consistency: ', $Script:Reporting['GPOConsistency']['Variables']['ConsistentInside'] -FontWeight normal, bold + New-HTMLListItem -Text 'Inconsistent top level permissions: ', $Script:Reporting['GPOConsistency']['Variables']['Inconsistent'] -FontWeight normal, bold + New-HTMLListItem -Text "Inconsistent inherited permissions: ", $Script:Reporting['GPOConsistency']['Variables']['InconsistentInside'] -FontWeight normal, bold } -FontSize 10pt New-HTMLText -FontSize 10pt -Text 'Having incosistent permissions on AD in comparison to those on SYSVOL can lead to uncontrolled ability to modify them.' New-HTMLChart { New-ChartLegend -Names 'Bad', 'Good' -Color PaleGreen, Salmon New-ChartBarOptions -Type barStacked New-ChartLegend -Name 'Consistent', 'Inconsistent' - New-ChartBar -Name 'TopLevel' -Value $Script:GPOConfiguration['GPOConsistency']['Variables']['Consistent'], $Script:GPOConfiguration['GPOConsistency']['Variables']['Inconsistent'] - New-ChartBar -Name 'Inherited' -Value $Script:GPOConfiguration['GPOConsistency']['Variables']['ConsistentInside'], $Script:GPOConfiguration['GPOConsistency']['Variables']['InconsistentInside'] + New-ChartBar -Name 'TopLevel' -Value $Script:Reporting['GPOConsistency']['Variables']['Consistent'], $Script:Reporting['GPOConsistency']['Variables']['Inconsistent'] + New-ChartBar -Name 'Inherited' -Value $Script:Reporting['GPOConsistency']['Variables']['ConsistentInside'], $Script:Reporting['GPOConsistency']['Variables']['InconsistentInside'] } -Title 'Permissions Consistency' -TitleAlignment center } } @@ -58,10 +58,10 @@ } New-HTMLText -Text 'Following list presents ', 'permissions consistency between Active Directory and SYSVOL for Group Policies' -FontSize 10pt -FontWeight normal, bold New-HTMLList -Type Unordered { - New-HTMLListItem -Text 'Top level permissions consistency: ', $Script:GPOConfiguration['GPOConsistency']['Variables']['Consistent'] -FontWeight normal, bold - New-HTMLListItem -Text 'Inherited permissions consistency: ', $Script:GPOConfiguration['GPOConsistency']['Variables']['ConsistentInside'] -FontWeight normal, bold - New-HTMLListItem -Text 'Inconsistent top level permissions: ', $Script:GPOConfiguration['GPOConsistency']['Variables']['Inconsistent'] -FontWeight normal, bold - New-HTMLListItem -Text "Inconsistent inherited permissions: ", $Script:GPOConfiguration['GPOConsistency']['Variables']['InconsistentInside'] -FontWeight normal, bold + New-HTMLListItem -Text 'Top level permissions consistency: ', $Script:Reporting['GPOConsistency']['Variables']['Consistent'] -FontWeight normal, bold + New-HTMLListItem -Text 'Inherited permissions consistency: ', $Script:Reporting['GPOConsistency']['Variables']['ConsistentInside'] -FontWeight normal, bold + New-HTMLListItem -Text 'Inconsistent top level permissions: ', $Script:Reporting['GPOConsistency']['Variables']['Inconsistent'] -FontWeight normal, bold + New-HTMLListItem -Text "Inconsistent inherited permissions: ", $Script:Reporting['GPOConsistency']['Variables']['InconsistentInside'] -FontWeight normal, bold } -FontSize 10pt New-HTMLText -FontSize 10pt -Text 'Having incosistent permissions on AD in comparison to those on SYSVOL can lead to uncontrolled ability to modify them. Please notice that if ', ` ' Not available ', 'is visible in the table you should first fix related, more pressing issue, before fixing permissions inconsistency.' -FontWeight normal, bold, normal @@ -76,13 +76,13 @@ New-ChartLegend -Names 'Bad', 'Good' -Color PaleGreen, Salmon New-ChartBarOptions -Type barStacked New-ChartLegend -Name 'Consistent', 'Inconsistent' - New-ChartBar -Name 'TopLevel' -Value $Script:GPOConfiguration['GPOConsistency']['Variables']['Consistent'], $Script:GPOConfiguration['GPOConsistency']['Variables']['Inconsistent'] - New-ChartBar -Name 'Inherited' -Value $Script:GPOConfiguration['GPOConsistency']['Variables']['ConsistentInside'], $Script:GPOConfiguration['GPOConsistency']['Variables']['InconsistentInside'] + New-ChartBar -Name 'TopLevel' -Value $Script:Reporting['GPOConsistency']['Variables']['Consistent'], $Script:Reporting['GPOConsistency']['Variables']['Inconsistent'] + New-ChartBar -Name 'Inherited' -Value $Script:Reporting['GPOConsistency']['Variables']['ConsistentInside'], $Script:Reporting['GPOConsistency']['Variables']['InconsistentInside'] } -Title 'Permissions Consistency' -TitleAlignment center } } New-HTMLSection -Name 'Group Policy Permissions Consistency' { - New-HTMLTable -DataTable $Script:GPOConfiguration['GPOConsistency']['Data'] -Filtering { + New-HTMLTable -DataTable $Script:Reporting['GPOConsistency']['Data'] -Filtering { New-HTMLTableCondition -Name 'ACLConsistent' -Value $false -BackgroundColor Salmon -TextTransform capitalize -ComparisonType string New-HTMLTableCondition -Name 'ACLConsistentInside' -Value $false -BackgroundColor Salmon -TextTransform capitalize -ComparisonType string New-HTMLTableCondition -Name 'ACLConsistent' -Value $true -BackgroundColor PaleGreen -TextTransform capitalize -ComparisonType string diff --git a/Private/Invoke.GPOZaurrDuplicate.ps1 b/Private/Invoke.GPOZaurrDuplicate.ps1 index cca0b82..ba67b3e 100644 --- a/Private/Invoke.GPOZaurrDuplicate.ps1 +++ b/Private/Invoke.GPOZaurrDuplicate.ps1 @@ -16,6 +16,6 @@ } Solution = { - New-HTMLTable -DataTable $Script:GPOConfiguration['GPODuplicates']['Data'] -Filtering + New-HTMLTable -DataTable $Script:Reporting['GPODuplicates']['Data'] -Filtering } } \ No newline at end of file diff --git a/Private/Invoke.GPOZaurrFiles.ps1 b/Private/Invoke.GPOZaurrFiles.ps1 index ad69ddc..d41cdd7 100644 --- a/Private/Invoke.GPOZaurrFiles.ps1 +++ b/Private/Invoke.GPOZaurrFiles.ps1 @@ -16,6 +16,6 @@ } Solution = { - New-HTMLTable -DataTable $Script:GPOConfiguration['GPOFiles']['Data'] -Filtering + New-HTMLTable -DataTable $Script:Reporting['GPOFiles']['Data'] -Filtering } } \ No newline at end of file diff --git a/Private/Invoke.GPOZaurrList.ps1 b/Private/Invoke.GPOZaurrList.ps1 index 28f93b9..3cabc80 100644 --- a/Private/Invoke.GPOZaurrList.ps1 +++ b/Private/Invoke.GPOZaurrList.ps1 @@ -7,40 +7,40 @@ Get-GPOZaurr } Processing = { - foreach ($GPO in $Script:GPOConfiguration['GPOList']['Data']) { + foreach ($GPO in $Script:Reporting['GPOList']['Data']) { if ($GPO.Linked -eq $false -and $GPO.Empty -eq $true) { # Not linked, Empty - $Script:GPOConfiguration['GPOList']['Variables']['GPOEmptyAndUnlinked']++ - $Script:GPOConfiguration['GPOList']['Variables']['GPOEmptyOrUnlinked']++ - $Script:GPOConfiguration['GPOList']['Variables']['GPONotLinked']++ - $Script:GPOConfiguration['GPOList']['Variables']['GPOEmpty']++ + $Script:Reporting['GPOList']['Variables']['GPOEmptyAndUnlinked']++ + $Script:Reporting['GPOList']['Variables']['GPOEmptyOrUnlinked']++ + $Script:Reporting['GPOList']['Variables']['GPONotLinked']++ + $Script:Reporting['GPOList']['Variables']['GPOEmpty']++ } elseif ($GPO.Linked -eq $true -and $GPO.Empty -eq $true) { # Linked, But EMPTY - $Script:GPOConfiguration['GPOList']['Variables']['GPOLinkedButEmpty']++ - $Script:GPOConfiguration['GPOList']['Variables']['GPOEmptyOrUnlinked']++ - $Script:GPOConfiguration['GPOList']['Variables']['GPOEmpty']++ - $Script:GPOConfiguration['GPOList']['Variables']['GPOLinked']++ + $Script:Reporting['GPOList']['Variables']['GPOLinkedButEmpty']++ + $Script:Reporting['GPOList']['Variables']['GPOEmptyOrUnlinked']++ + $Script:Reporting['GPOList']['Variables']['GPOEmpty']++ + $Script:Reporting['GPOList']['Variables']['GPOLinked']++ } elseif ($GPO.Linked -eq $false) { # Not linked, but not EMPTY - $Script:GPOConfiguration['GPOList']['Variables']['GPONotLinked']++ - $Script:GPOConfiguration['GPOList']['Variables']['GPOEmptyOrUnlinked']++ - $Script:GPOConfiguration['GPOList']['Variables']['GPONotEmpty']++ + $Script:Reporting['GPOList']['Variables']['GPONotLinked']++ + $Script:Reporting['GPOList']['Variables']['GPOEmptyOrUnlinked']++ + $Script:Reporting['GPOList']['Variables']['GPONotEmpty']++ } elseif ($GPO.Empty -eq $true) { # Linked, But EMPTY - $Script:GPOConfiguration['GPOList']['Variables']['GPOEmpty']++ - $Script:GPOConfiguration['GPOList']['Variables']['GPOEmptyOrUnlinked']++ - $Script:GPOConfiguration['GPOList']['Variables']['GPOLinked']++ + $Script:Reporting['GPOList']['Variables']['GPOEmpty']++ + $Script:Reporting['GPOList']['Variables']['GPOEmptyOrUnlinked']++ + $Script:Reporting['GPOList']['Variables']['GPOLinked']++ } else { # Linked, not EMPTY - $Script:GPOConfiguration['GPOList']['Variables']['GPOValid']++ - $Script:GPOConfiguration['GPOList']['Variables']['GPOLinked']++ - $Script:GPOConfiguration['GPOList']['Variables']['GPONotEmpty']++ + $Script:Reporting['GPOList']['Variables']['GPOValid']++ + $Script:Reporting['GPOList']['Variables']['GPOLinked']++ + $Script:Reporting['GPOList']['Variables']['GPONotEmpty']++ } if ($GPO.LinksDisabledCount -eq $GPO.LinksCount -and $GPO.LinksCount -gt 0) { - $Script:GPOConfiguration['GPOList']['Variables']['GPOLinkedButLinkDisabled']++ + $Script:Reporting['GPOList']['Variables']['GPOLinkedButLinkDisabled']++ } } - $Script:GPOConfiguration['GPOList']['Variables']['GPOTotal'] = $Script:GPOConfiguration['GPOList']['Data'].Count + $Script:Reporting['GPOList']['Variables']['GPOTotal'] = $Script:Reporting['GPOList']['Data'].Count } Variables = @{ GPONotLinked = 0 @@ -58,14 +58,14 @@ New-HTMLPanel { New-HTMLText -Text 'Following chart presents ', 'Linked / Empty and Unlinked Group Policies' -FontSize 10pt -FontWeight normal, bold New-HTMLList -Type Unordered { - New-HTMLListItem -Text 'Group Policies total: ', $Script:GPOConfiguration['GPOList']['Variables']['GPOTotal'] -FontWeight normal, bold - New-HTMLListItem -Text "Group Policies valid: ", $Script:GPOConfiguration['GPOList']['Variables']['GPOValid'] -FontWeight normal, bold - New-HTMLListItem -Text "Group Policies to delete: ", $Script:GPOConfiguration['GPOList']['Variables']['GPOEmptyOrUnlinked'] -FontWeight normal, bold { + New-HTMLListItem -Text 'Group Policies total: ', $Script:Reporting['GPOList']['Variables']['GPOTotal'] -FontWeight normal, bold + New-HTMLListItem -Text "Group Policies valid: ", $Script:Reporting['GPOList']['Variables']['GPOValid'] -FontWeight normal, bold + New-HTMLListItem -Text "Group Policies to delete: ", $Script:Reporting['GPOList']['Variables']['GPOEmptyOrUnlinked'] -FontWeight normal, bold { New-HTMLList -Type Unordered { - New-HTMLListItem -Text 'Group Policies that are unlinked (are not doing anything currently): ', $Script:GPOConfiguration['GPOList']['Variables']['GPONotLinked'] -FontWeight normal, bold - New-HTMLListItem -Text "Group Policies that are empty (have no settings): ", $Script:GPOConfiguration['GPOList']['Variables']['GPOEmpty'] -FontWeight normal, bold - New-HTMLListItem -Text "Group Policies that are linked, but empty: ", $Script:GPOConfiguration['GPOList']['Variables']['GPOLinkedButEmpty'] -FontWeight normal, bold - New-HTMLListItem -Text "Group Policies that are linked, but link disabled: ", $Script:GPOConfiguration['GPOList']['Variables']['GPOLinkedButLinkDisabled'] -FontWeight normal, bold + New-HTMLListItem -Text 'Group Policies that are unlinked (are not doing anything currently): ', $Script:Reporting['GPOList']['Variables']['GPONotLinked'] -FontWeight normal, bold + New-HTMLListItem -Text "Group Policies that are empty (have no settings): ", $Script:Reporting['GPOList']['Variables']['GPOEmpty'] -FontWeight normal, bold + New-HTMLListItem -Text "Group Policies that are linked, but empty: ", $Script:Reporting['GPOList']['Variables']['GPOLinkedButEmpty'] -FontWeight normal, bold + New-HTMLListItem -Text "Group Policies that are linked, but link disabled: ", $Script:Reporting['GPOList']['Variables']['GPOLinkedButLinkDisabled'] -FontWeight normal, bold } } } -FontSize 10pt @@ -74,10 +74,10 @@ New-ChartBarOptions -Type barStacked #New-ChartLegend -Names 'Unlinked', 'Linked', 'Empty', 'Total' -Color Salmon, PaleGreen, PaleVioletRed, PaleTurquoise New-ChartLegend -Names 'Good', 'Bad' -Color PaleGreen, Salmon - #New-ChartBar -Name 'Group Policies' -Value $Script:GPOConfiguration['GPOList']['Variables']['GPONotLinked'], $Script:GPOConfiguration['GPOList']['Variables']['GPOLinked'], $Script:GPOConfiguration['GPOList']['Variables']['GPOEmpty'], $Script:GPOConfiguration['GPOList']['Variables']['GPOTotal'] - New-ChartBar -Name 'Linked' -Value $Script:GPOConfiguration['GPOList']['Variables']['GPOLinked'], $Script:GPOConfiguration['GPOList']['Variables']['GPONotLinked'] - New-ChartBar -Name 'Empty' -Value $Script:GPOConfiguration['GPOList']['Variables']['GPONotEmpty'], $Script:GPOConfiguration['GPOList']['Variables']['GPOEmpty'] - New-ChartBar -Name 'Valid' -Value $Script:GPOConfiguration['GPOList']['Variables']['GPOValid'], $Script:GPOConfiguration['GPOList']['Variables']['GPOEmptyOrUnlinked'] + #New-ChartBar -Name 'Group Policies' -Value $Script:Reporting['GPOList']['Variables']['GPONotLinked'], $Script:Reporting['GPOList']['Variables']['GPOLinked'], $Script:Reporting['GPOList']['Variables']['GPOEmpty'], $Script:Reporting['GPOList']['Variables']['GPOTotal'] + New-ChartBar -Name 'Linked' -Value $Script:Reporting['GPOList']['Variables']['GPOLinked'], $Script:Reporting['GPOList']['Variables']['GPONotLinked'] + New-ChartBar -Name 'Empty' -Value $Script:Reporting['GPOList']['Variables']['GPONotEmpty'], $Script:Reporting['GPOList']['Variables']['GPOEmpty'] + New-ChartBar -Name 'Valid' -Value $Script:Reporting['GPOList']['Variables']['GPOValid'], $Script:Reporting['GPOList']['Variables']['GPOEmptyOrUnlinked'] } -TitleAlignment center } } @@ -94,14 +94,14 @@ } New-HTMLText @newHTMLTextSplat New-HTMLList -Type Unordered { - New-HTMLListItem -Text 'Group Policies total: ', $Script:GPOConfiguration['GPOList']['Variables']['GPOTotal'] -FontWeight normal, bold - New-HTMLListItem -Text "Group Policies valid: ", $Script:GPOConfiguration['GPOList']['Variables']['GPOValid'] -FontWeight normal, bold - New-HTMLListItem -Text "Group Policies to delete: ", $Script:GPOConfiguration['GPOList']['Variables']['GPOEmptyOrUnlinked'] -FontWeight normal, bold { + New-HTMLListItem -Text 'Group Policies total: ', $Script:Reporting['GPOList']['Variables']['GPOTotal'] -FontWeight normal, bold + New-HTMLListItem -Text "Group Policies valid: ", $Script:Reporting['GPOList']['Variables']['GPOValid'] -FontWeight normal, bold + New-HTMLListItem -Text "Group Policies to delete: ", $Script:Reporting['GPOList']['Variables']['GPOEmptyOrUnlinked'] -FontWeight normal, bold { New-HTMLList -Type Unordered { - New-HTMLListItem -Text 'Group Policies that are unlinked (are not doing anything currently): ', $Script:GPOConfiguration['GPOList']['Variables']['GPONotLinked'] -FontWeight normal, bold - New-HTMLListItem -Text "Group Policies that are empty (have no settings): ", $Script:GPOConfiguration['GPOList']['Variables']['GPOEmpty'] -FontWeight normal, bold - New-HTMLListItem -Text "Group Policies that are linked, but empty: ", $Script:GPOConfiguration['GPOList']['Variables']['GPOLinkedButEmpty'] -FontWeight normal, bold - New-HTMLListItem -Text "Group Policies that are linked, but link disabled: ", $Script:GPOConfiguration['GPOList']['Variables']['GPOLinkedButLinkDisabled'] -FontWeight normal, bold + New-HTMLListItem -Text 'Group Policies that are unlinked (are not doing anything currently): ', $Script:Reporting['GPOList']['Variables']['GPONotLinked'] -FontWeight normal, bold + New-HTMLListItem -Text "Group Policies that are empty (have no settings): ", $Script:Reporting['GPOList']['Variables']['GPOEmpty'] -FontWeight normal, bold + New-HTMLListItem -Text "Group Policies that are linked, but empty: ", $Script:Reporting['GPOList']['Variables']['GPOLinkedButEmpty'] -FontWeight normal, bold + New-HTMLListItem -Text "Group Policies that are linked, but link disabled: ", $Script:Reporting['GPOList']['Variables']['GPOLinkedButLinkDisabled'] -FontWeight normal, bold } } } -FontSize 10pt @@ -112,15 +112,15 @@ New-ChartBarOptions -Type barStacked #New-ChartLegend -Names 'Unlinked', 'Linked', 'Empty', 'Total' -Color Salmon, PaleGreen, PaleVioletRed, PaleTurquoise New-ChartLegend -Names 'Good', 'Bad' -Color PaleGreen, Salmon - #New-ChartBar -Name 'Group Policies' -Value $Script:GPOConfiguration['GPOList']['Variables']['GPONotLinked'], $Script:GPOConfiguration['GPOList']['Variables']['GPOLinked'], $Script:GPOConfiguration['GPOList']['Variables']['GPOEmpty'], $Script:GPOConfiguration['GPOList']['Variables']['GPOTotal'] - New-ChartBar -Name 'Linked' -Value $Script:GPOConfiguration['GPOList']['Variables']['GPOLinked'], $Script:GPOConfiguration['GPOList']['Variables']['GPONotLinked'] - New-ChartBar -Name 'Empty' -Value $Script:GPOConfiguration['GPOList']['Variables']['GPONotEmpty'], $Script:GPOConfiguration['GPOList']['Variables']['GPOEmpty'] - New-ChartBar -Name 'Valid' -Value $Script:GPOConfiguration['GPOList']['Variables']['GPOValid'], $Script:GPOConfiguration['GPOList']['Variables']['GPOEmptyOrUnlinked'] + #New-ChartBar -Name 'Group Policies' -Value $Script:Reporting['GPOList']['Variables']['GPONotLinked'], $Script:Reporting['GPOList']['Variables']['GPOLinked'], $Script:Reporting['GPOList']['Variables']['GPOEmpty'], $Script:Reporting['GPOList']['Variables']['GPOTotal'] + New-ChartBar -Name 'Linked' -Value $Script:Reporting['GPOList']['Variables']['GPOLinked'], $Script:Reporting['GPOList']['Variables']['GPONotLinked'] + New-ChartBar -Name 'Empty' -Value $Script:Reporting['GPOList']['Variables']['GPONotEmpty'], $Script:Reporting['GPOList']['Variables']['GPOEmpty'] + New-ChartBar -Name 'Valid' -Value $Script:Reporting['GPOList']['Variables']['GPOValid'], $Script:Reporting['GPOList']['Variables']['GPOEmptyOrUnlinked'] } -TitleAlignment center } } New-HTMLSection -Name 'Group Policies List' { - New-HTMLTable -DataTable $Script:GPOConfiguration['GPOList']['Data'] -Filtering { + New-HTMLTable -DataTable $Script:Reporting['GPOList']['Data'] -Filtering { New-HTMLTableCondition -Name 'Empty' -Value $true -BackgroundColor Salmon -TextTransform capitalize -ComparisonType string New-HTMLTableCondition -Name 'Linked' -Value $false -BackgroundColor Salmon -TextTransform capitalize -ComparisonType string } -PagingOptions 10, 20, 30, 40, 50 diff --git a/Private/Invoke.GPOZaurrNetLogonPermissions.ps1 b/Private/Invoke.GPOZaurrNetLogonPermissions.ps1 index 507e5c3..f357242 100644 --- a/Private/Invoke.GPOZaurrNetLogonPermissions.ps1 +++ b/Private/Invoke.GPOZaurrNetLogonPermissions.ps1 @@ -7,33 +7,33 @@ Get-GPOZaurrNetLogon } Processing = { - foreach ($File in $Script:GPOConfiguration['NetLogonPermissions']['Data']) { + foreach ($File in $Script:Reporting['NetLogonPermissions']['Data']) { if ($File.FileSystemRights -eq 'Owner') { - $Script:GPOConfiguration['NetLogonPermissions']['Variables']['NetLogonOwners']++ + $Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwners']++ if ($File.PrincipalType -eq 'WellKnownAdministrative') { - $Script:GPOConfiguration['NetLogonPermissions']['Variables']['NetLogonOwnersAdministrative']++ + $Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwnersAdministrative']++ } elseif ($File.PrincipalType -eq 'Administrative') { - $Script:GPOConfiguration['NetLogonPermissions']['Variables']['NetLogonOwnersAdministrative']++ + $Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwnersAdministrative']++ } else { - $Script:GPOConfiguration['NetLogonPermissions']['Variables']['NetLogonOwnersNotAdministrative']++ + $Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwnersNotAdministrative']++ } if ($File.PrincipalSid -eq 'S-1-5-32-544') { - $Script:GPOConfiguration['NetLogonPermissions']['Variables']['NetLogonOwnersAdministrators']++ + $Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwnersAdministrators']++ } elseif ($File.PrincipalType -in 'WellKnownAdministrative', 'Administrative') { - $Script:GPOConfiguration['NetLogonPermissions']['Variables']['NetLogonOwnersAdministrativeNotAdministrators']++ - $Script:GPOConfiguration['NetLogonPermissions']['Variables']['NetLogonOwnersToFix']++ + $Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwnersAdministrativeNotAdministrators']++ + $Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwnersToFix']++ } else { - $Script:GPOConfiguration['NetLogonPermissions']['Variables']['NetLogonOwnersToFix']++ + $Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwnersToFix']++ } - $Script:GPOConfiguration['NetLogonPermissions']['Variables']['Owner'].Add($File) + $Script:Reporting['NetLogonPermissions']['Variables']['Owner'].Add($File) } else { - $Script:GPOConfiguration['NetLogonPermissions']['Variables']['NonOwner'].Add($File) + $Script:Reporting['NetLogonPermissions']['Variables']['NonOwner'].Add($File) } } - if ($Script:GPOConfiguration['NetLogonPermissions']['Variables']['NetLogonOwnersToFix'].Count -gt 0) { - $Script:GPOConfiguration['NetLogonPermissions']['Action'] = $true + if ($Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwnersToFix'].Count -gt 0) { + $Script:Reporting['NetLogonPermissions']['Action'] = $true } else { - $Script:GPOConfiguration['NetLogonPermissions']['Action'] = $false + $Script:Reporting['NetLogonPermissions']['Action'] = $false } } Variables = @{ @@ -50,19 +50,19 @@ New-HTMLPanel { New-HTMLText -Text 'Following chart presents ', 'NetLogon Summary' -FontSize 10pt -FontWeight normal, bold New-HTMLList -Type Unordered { - New-HTMLListItem -Text 'NetLogon Files in Total: ', $Script:GPOConfiguration['NetLogonPermissions']['Variables']['NetLogonOwners'] -FontWeight normal, bold - New-HTMLListItem -Text 'NetLogon BUILTIN\Administrators as Owner: ', $Script:GPOConfiguration['NetLogonPermissions']['Variables']['NetLogonOwnersAdministrators'] -FontWeight normal, bold - New-HTMLListItem -Text "NetLogon Owners requiring change: ", $Script:GPOConfiguration['NetLogonPermissions']['Variables']['NetLogonOwnersToFix'] -FontWeight normal, bold { + New-HTMLListItem -Text 'NetLogon Files in Total: ', $Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwners'] -FontWeight normal, bold + New-HTMLListItem -Text 'NetLogon BUILTIN\Administrators as Owner: ', $Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwnersAdministrators'] -FontWeight normal, bold + New-HTMLListItem -Text "NetLogon Owners requiring change: ", $Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwnersToFix'] -FontWeight normal, bold { New-HTMLList -Type Unordered { - New-HTMLListItem -Text 'Not Administrative: ', $Script:GPOConfiguration['NetLogonPermissions']['Variables']['NetLogonOwnersNotAdministrative'] -FontWeight normal, bold - New-HTMLListItem -Text 'Administrative, but not BUILTIN\Administrators: ', $Script:GPOConfiguration['NetLogonPermissions']['Variables']['NetLogonOwnersAdministrativeNotAdministrators'] -FontWeight normal, bold + New-HTMLListItem -Text 'Not Administrative: ', $Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwnersNotAdministrative'] -FontWeight normal, bold + New-HTMLListItem -Text 'Administrative, but not BUILTIN\Administrators: ', $Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwnersAdministrativeNotAdministrators'] -FontWeight normal, bold } } } -FontSize 10pt #New-HTMLText -FontSize 10pt -Text 'Those problems must be resolved before doing other clenaup activities.' New-HTMLChart { - New-ChartPie -Name 'Correct Owners' -Value $Script:GPOConfiguration['NetLogonPermissions']['Variables']['NetLogonOwnersAdministrators'] -Color LightGreen - New-ChartPie -Name 'Incorrect Owners' -Value $Script:GPOConfiguration['NetLogonPermissions']['Variables']['NetLogonOwnersToFix'] -Color Crimson + New-ChartPie -Name 'Correct Owners' -Value $Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwnersAdministrators'] -Color LightGreen + New-ChartPie -Name 'Incorrect Owners' -Value $Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwnersToFix'] -Color Crimson } -Title 'NetLogon Owners' -TitleAlignment center } New-HTMLPanel { @@ -79,12 +79,12 @@ "That's why as a best-practice it's recommended to change any non-administrative owners to BUILTIN\Administrators, and even Administrative accounts should be replaced with it. " } -FontSize 10pt New-HTMLList -Type Unordered { - New-HTMLListItem -Text 'NetLogon Files in Total: ', $Script:GPOConfiguration['NetLogonPermissions']['Variables']['NetLogonOwners'] -FontWeight normal, bold - New-HTMLListItem -Text 'NetLogon BUILTIN\Administrators as Owner: ', $Script:GPOConfiguration['NetLogonPermissions']['Variables']['NetLogonOwnersAdministrators'] -FontWeight normal, bold - New-HTMLListItem -Text "NetLogon Owners requiring change: ", $Script:GPOConfiguration['NetLogonPermissions']['Variables']['NetLogonOwnersToFix'] -FontWeight normal, bold { + New-HTMLListItem -Text 'NetLogon Files in Total: ', $Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwners'] -FontWeight normal, bold + New-HTMLListItem -Text 'NetLogon BUILTIN\Administrators as Owner: ', $Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwnersAdministrators'] -FontWeight normal, bold + New-HTMLListItem -Text "NetLogon Owners requiring change: ", $Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwnersToFix'] -FontWeight normal, bold { New-HTMLList -Type Unordered { - New-HTMLListItem -Text 'Not Administrative: ', $Script:GPOConfiguration['NetLogonPermissions']['Variables']['NetLogonOwnersNotAdministrative'] -FontWeight normal, bold - New-HTMLListItem -Text 'Administrative, but not BUILTIN\Administrators: ', $Script:GPOConfiguration['NetLogonPermissions']['Variables']['NetLogonOwnersAdministrativeNotAdministrators'] -FontWeight normal, bold + New-HTMLListItem -Text 'Not Administrative: ', $Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwnersNotAdministrative'] -FontWeight normal, bold + New-HTMLListItem -Text 'Administrative, but not BUILTIN\Administrators: ', $Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwnersAdministrativeNotAdministrators'] -FontWeight normal, bold } } } -FontSize 10pt @@ -92,13 +92,13 @@ } New-HTMLPanel { New-HTMLChart { - New-ChartPie -Name 'Correct Owners' -Value $Script:GPOConfiguration['NetLogonPermissions']['Variables']['NetLogonOwnersAdministrators'] -Color LightGreen - New-ChartPie -Name 'Incorrect Owners' -Value $Script:GPOConfiguration['NetLogonPermissions']['Variables']['NetLogonOwnersToFix'] -Color Crimson + New-ChartPie -Name 'Correct Owners' -Value $Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwnersAdministrators'] -Color LightGreen + New-ChartPie -Name 'Incorrect Owners' -Value $Script:Reporting['NetLogonPermissions']['Variables']['NetLogonOwnersToFix'] -Color Crimson } -Title 'NetLogon Owners' -TitleAlignment center } } New-HTMLSection -Name 'NetLogon Files List' { - New-HTMLTable -DataTable $Script:GPOConfiguration['NetLogonPermissions']['Variables']['Owner'] -Filtering { + New-HTMLTable -DataTable $Script:Reporting['NetLogonPermissions']['Variables']['Owner'] -Filtering { New-HTMLTableCondition -Name 'PrincipalSid' -Value "S-1-5-32-544" -BackgroundColor LightGreen -ComparisonType string New-HTMLTableCondition -Name 'PrincipalSid' -Value "S-1-5-32-544" -BackgroundColor Salmon -ComparisonType string -Operator ne New-HTMLTableCondition -Name 'PrincipalType' -Value "WellKnownAdministrative" -BackgroundColor LightGreen -ComparisonType string -Operator eq @@ -167,7 +167,7 @@ } New-HTMLTab -Name 'NetLogon Permissions' { New-HTMLSection -Name 'NetLogon Files List' { - New-HTMLTable -DataTable $Script:GPOConfiguration['NetLogonPermissions']['Variables']['NonOwner'] -Filtering + New-HTMLTable -DataTable $Script:Reporting['NetLogonPermissions']['Variables']['NonOwner'] -Filtering } } } diff --git a/Private/Invoke.GPOZaurrOrphans.ps1 b/Private/Invoke.GPOZaurrOrphans.ps1 index 1755aa5..74a9e5b 100644 --- a/Private/Invoke.GPOZaurrOrphans.ps1 +++ b/Private/Invoke.GPOZaurrOrphans.ps1 @@ -7,19 +7,13 @@ Get-GPOZaurrBroken } Processing = { - #$NotAvailableInAD = [System.Collections.Generic.List[PSCustomObject]]::new() - #$NotAvailableOnSysvol = [System.Collections.Generic.List[PSCustomObject]]::new() - #$NotAvailablePermissionIssue = [System.Collections.Generic.List[PSCustomObject]]::new() - foreach ($GPO in $Script:GPOConfiguration['GPOOrphans']['Data']) { + foreach ($GPO in $Script:Reporting['GPOOrphans']['Data']) { if ($GPO.Status -eq 'Not available in AD') { - #$NotAvailableInAD.Add($NotAvailableInAD) - $Script:GPOConfiguration['GPOOrphans']['Variables']['NotAvailableInAD']++ + $Script:Reporting['GPOOrphans']['Variables']['NotAvailableInAD']++ } elseif ($GPO.Status -eq 'Not available on SYSVOL') { - #$NotAvailableOnSysvol.Add($NotAvailableInAD) - $Script:GPOConfiguration['GPOOrphans']['Variables']['NotAvailableOnSysvol']++ + $Script:Reporting['GPOOrphans']['Variables']['NotAvailableOnSysvol']++ } elseif ($GPO.Status -eq 'Permissions issue') { - #$NotAvailablePermissionIssue.Add($NotAvailableInAD) - $Script:GPOConfiguration['GPOOrphans']['Variables']['NotAvailablePermissionIssue']++ + $Script:Reporting['GPOOrphans']['Variables']['NotAvailablePermissionIssue']++ } } } @@ -42,15 +36,15 @@ } New-HTMLText -Text 'Following chart presents ', 'Broken / Orphaned Group Policies' -FontSize 10pt -FontWeight normal, bold New-HTMLList -Type Unordered { - New-HTMLListItem -Text 'Group Policies on SYSVOL, but no details in AD: ', $Script:GPOConfiguration['GPOOrphans']['Variables']['NotAvailableInAD'] -FontWeight normal, bold - New-HTMLListItem -Text 'Group Policies in AD, but no content on SYSVOL: ', $Script:GPOConfiguration['GPOOrphans']['Variables']['NotAvailableOnSysvol'] -FontWeight normal, bold - New-HTMLListItem -Text "Group Policies which couldn't be assed due to permissions issue: ", $Script:GPOConfiguration['GPOOrphans']['Variables']['NotAvailablePermissionIssue'] -FontWeight normal, bold + New-HTMLListItem -Text 'Group Policies on SYSVOL, but no details in AD: ', $Script:Reporting['GPOOrphans']['Variables']['NotAvailableInAD'] -FontWeight normal, bold + New-HTMLListItem -Text 'Group Policies in AD, but no content on SYSVOL: ', $Script:Reporting['GPOOrphans']['Variables']['NotAvailableOnSysvol'] -FontWeight normal, bold + New-HTMLListItem -Text "Group Policies which couldn't be assed due to permissions issue: ", $Script:Reporting['GPOOrphans']['Variables']['NotAvailablePermissionIssue'] -FontWeight normal, bold } -FontSize 10pt New-HTMLText -FontSize 10pt -Text 'Those problems must be resolved before doing other clenaup activities.' New-HTMLChart { New-ChartBarOptions -Type barStacked New-ChartLegend -Name 'Not in AD', 'Not on SYSVOL', 'Permissions Issue' -Color Crimson, LightCoral, IndianRed - New-ChartBar -Name 'Orphans' -Value $Script:GPOConfiguration['GPOOrphans']['Variables']['NotAvailableInAD'], $Script:GPOConfiguration['GPOOrphans']['Variables']['NotAvailableOnSysvol'], $Script:GPOConfiguration['GPOOrphans']['Variables']['NotAvailablePermissionIssue'] + New-ChartBar -Name 'Orphans' -Value $Script:Reporting['GPOOrphans']['Variables']['NotAvailableInAD'], $Script:Reporting['GPOOrphans']['Variables']['NotAvailableOnSysvol'], $Script:Reporting['GPOOrphans']['Variables']['NotAvailablePermissionIssue'] } -Title 'Broken / Orphaned Group Policies' -TitleAlignment center } } @@ -69,9 +63,9 @@ } -FontSize 10pt New-HTMLText -Text 'Following problems were detected:' -FontSize 10pt -FontWeight bold New-HTMLList -Type Unordered { - New-HTMLListItem -Text 'Group Policies on SYSVOL, but no details in AD: ', $Script:GPOConfiguration['GPOOrphans']['Variables']['NotAvailableInAD'] -FontWeight normal, bold - New-HTMLListItem -Text 'Group Policies in AD, but no content on SYSVOL: ', $Script:GPOConfiguration['GPOOrphans']['Variables']['NotAvailableOnSysvol'] -FontWeight normal, bold - New-HTMLListItem -Text "Group Policies which couldn't be assed due to permissions issue: ", $Script:GPOConfiguration['GPOOrphans']['Variables']['NotAvailablePermissionIssue'] -FontWeight normal, bold + New-HTMLListItem -Text 'Group Policies on SYSVOL, but no details in AD: ', $Script:Reporting['GPOOrphans']['Variables']['NotAvailableInAD'] -FontWeight normal, bold + New-HTMLListItem -Text 'Group Policies in AD, but no content on SYSVOL: ', $Script:Reporting['GPOOrphans']['Variables']['NotAvailableOnSysvol'] -FontWeight normal, bold + New-HTMLListItem -Text "Group Policies which couldn't be assed due to permissions issue: ", $Script:Reporting['GPOOrphans']['Variables']['NotAvailablePermissionIssue'] -FontWeight normal, bold } -FontSize 10pt New-HTMLText -Text "Please review output in table and follow the steps below table to get Active Directory Group Policies in healthy state." -FontSize 10pt } @@ -83,12 +77,12 @@ New-HTMLChart { New-ChartBarOptions -Type barStacked New-ChartLegend -Name 'Not in AD', 'Not on SYSVOL', 'Permissions Issue' -Color Crimson, LightCoral, IndianRed - New-ChartBar -Name 'Orphans' -Value $Script:GPOConfiguration['GPOOrphans']['Variables']['NotAvailableInAD'], $Script:GPOConfiguration['GPOOrphans']['Variables']['NotAvailableOnSysvol'], $Script:GPOConfiguration['GPOOrphans']['Variables']['NotAvailablePermissionIssue'] + New-ChartBar -Name 'Orphans' -Value $Script:Reporting['GPOOrphans']['Variables']['NotAvailableInAD'], $Script:Reporting['GPOOrphans']['Variables']['NotAvailableOnSysvol'], $Script:Reporting['GPOOrphans']['Variables']['NotAvailablePermissionIssue'] } -Title 'Broken / Orphaned Group Policies' -TitleAlignment center } } New-HTMLSection -Name 'Health State of Group Policies' { - New-HTMLTable -DataTable $Script:GPOConfiguration['GPOOrphans']['Data'] -Filtering { + New-HTMLTable -DataTable $Script:Reporting['GPOOrphans']['Data'] -Filtering { New-HTMLTableCondition -Name 'Status' -Value "Not available in AD" -BackgroundColor Salmon -ComparisonType string New-HTMLTableCondition -Name 'Status' -Value "Not available on SYSVOL" -BackgroundColor LightCoral -ComparisonType string New-HTMLTableCondition -Name 'Status' -Value "Permissions issue" -BackgroundColor MediumVioletRed -ComparisonType string -Color White diff --git a/Private/Invoke.GPOZaurrOwners.ps1 b/Private/Invoke.GPOZaurrOwners.ps1 index a21d9af..f2e5ace 100644 --- a/Private/Invoke.GPOZaurrOwners.ps1 +++ b/Private/Invoke.GPOZaurrOwners.ps1 @@ -5,29 +5,29 @@ Data = $null Execute = { Get-GPOZaurrOwner -IncludeSysvol } Processing = { - foreach ($GPO in $Script:GPOConfiguration['GPOOwners']['Data']) { + foreach ($GPO in $Script:Reporting['GPOOwners']['Data']) { if ($GPO.IsOwnerConsistent) { - $Script:GPOConfiguration['GPOOwners']['Variables']['IsConsistent']++ + $Script:Reporting['GPOOwners']['Variables']['IsConsistent']++ } else { - $Script:GPOConfiguration['GPOOwners']['Variables']['IsNotConsistent']++ + $Script:Reporting['GPOOwners']['Variables']['IsNotConsistent']++ } if ($GPO.IsOwnerAdministrative) { - $Script:GPOConfiguration['GPOOwners']['Variables']['IsAdministrative']++ + $Script:Reporting['GPOOwners']['Variables']['IsAdministrative']++ } else { - $Script:GPOConfiguration['GPOOwners']['Variables']['IsNotAdministrative']++ + $Script:Reporting['GPOOwners']['Variables']['IsNotAdministrative']++ } if (($GPO.IsOwnerAdministrative -eq $false -or $GPO.IsOwnerConsistent -eq $false) -and $GPO.SysvolExists -eq $true) { - $Script:GPOConfiguration['GPOOwners']['Variables']['WillFix']++ + $Script:Reporting['GPOOwners']['Variables']['WillFix']++ } elseif ($GPO.SysvolExists -eq $false) { - $Script:GPOConfiguration['GPOOwners']['Variables']['RequiresDiffFix']++ + $Script:Reporting['GPOOwners']['Variables']['RequiresDiffFix']++ } else { - $Script:GPOConfiguration['GPOOwners']['Variables']['WillNotTouch']++ + $Script:Reporting['GPOOwners']['Variables']['WillNotTouch']++ } } - if ($Script:GPOConfiguration['GPOOwners']['Variables']['WillFix'].Count -gt 0) { - $Script:GPOConfiguration['GPOOwners']['Action'] = $true + if ($Script:Reporting['GPOOwners']['Variables']['WillFix'].Count -gt 0) { + $Script:Reporting['GPOOwners']['Action'] = $true } else { - $Script:GPOConfiguration['GPOOwners']['Action'] = $false + $Script:Reporting['GPOOwners']['Action'] = $false } } Variables = @{ @@ -44,16 +44,16 @@ New-HTMLText -Text 'Following chart presents Group Policy owners and whether they are administrative and consistent. By design an owner of Group Policy should be Domain Admins or Enterprise Admins group only to prevent malicious takeover. ', ` "It's also important that owner in Active Directory matches owner on SYSVOL (file system)." -FontSize 10pt New-HTMLList -Type Unordered { - New-HTMLListItem -Text 'Administrative Owners: ', $Script:GPOConfiguration['GPOOwners']['Variables']['IsAdministrative'] -FontWeight normal, bold - New-HTMLListItem -Text 'Non-Administrative Owners: ', $Script:GPOConfiguration['GPOOwners']['Variables']['IsNotAdministrative'] -FontWeight normal, bold - New-HTMLListItem -Text "Owners consistent in AD and SYSVOL: ", $Script:GPOConfiguration['GPOOwners']['Variables']['IsConsistent'] -FontWeight normal, bold - New-HTMLListItem -Text "Owners not-consistent in AD and SYSVOL: ", $Script:GPOConfiguration['GPOOwners']['Variables']['IsNotConsistent'] -FontWeight normal, bold + New-HTMLListItem -Text 'Administrative Owners: ', $Script:Reporting['GPOOwners']['Variables']['IsAdministrative'] -FontWeight normal, bold + New-HTMLListItem -Text 'Non-Administrative Owners: ', $Script:Reporting['GPOOwners']['Variables']['IsNotAdministrative'] -FontWeight normal, bold + New-HTMLListItem -Text "Owners consistent in AD and SYSVOL: ", $Script:Reporting['GPOOwners']['Variables']['IsConsistent'] -FontWeight normal, bold + New-HTMLListItem -Text "Owners not-consistent in AD and SYSVOL: ", $Script:Reporting['GPOOwners']['Variables']['IsNotConsistent'] -FontWeight normal, bold } -FontSize 10pt New-HTMLChart { New-ChartBarOptions -Type barStacked New-ChartLegend -Name 'Yes', 'No' -Color PaleGreen, Orchid - New-ChartBar -Name 'Is administrative' -Value $Script:GPOConfiguration['GPOOwners']['Variables']['IsAdministrative'], $Script:GPOConfiguration['GPOOwners']['Variables']['IsNotAdministrative'] - New-ChartBar -Name 'Is consistent' -Value $Script:GPOConfiguration['GPOOwners']['Variables']['IsConsistent'], $Script:GPOConfiguration['GPOOwners']['Variables']['IsNotConsistent'] + New-ChartBar -Name 'Is administrative' -Value $Script:Reporting['GPOOwners']['Variables']['IsAdministrative'], $Script:Reporting['GPOOwners']['Variables']['IsNotAdministrative'] + New-ChartBar -Name 'Is consistent' -Value $Script:Reporting['GPOOwners']['Variables']['IsConsistent'], $Script:Reporting['GPOOwners']['Variables']['IsNotConsistent'] } -Title 'Group Policy Owners' -TitleAlignment center } } @@ -72,16 +72,16 @@ } New-HTMLText -Text "Here's a short summary of ", "Group Policy Owners", ": " -FontSize 10pt -FontWeight normal, bold, normal New-HTMLList -Type Unordered { - New-HTMLListItem -Text 'Administrative Owners: ', $Script:GPOConfiguration['GPOOwners']['Variables']['IsAdministrative'] -FontWeight normal, bold - New-HTMLListItem -Text 'Non-Administrative Owners: ', $Script:GPOConfiguration['GPOOwners']['Variables']['IsNotAdministrative'] -FontWeight normal, bold - New-HTMLListItem -Text "Owners consistent in AD and SYSVOL: ", $Script:GPOConfiguration['GPOOwners']['Variables']['IsConsistent'] -FontWeight normal, bold - New-HTMLListItem -Text "Owners not-consistent in AD and SYSVOL: ", $Script:GPOConfiguration['GPOOwners']['Variables']['IsNotConsistent'] -FontWeight normal, bold + New-HTMLListItem -Text 'Administrative Owners: ', $Script:Reporting['GPOOwners']['Variables']['IsAdministrative'] -FontWeight normal, bold + New-HTMLListItem -Text 'Non-Administrative Owners: ', $Script:Reporting['GPOOwners']['Variables']['IsNotAdministrative'] -FontWeight normal, bold + New-HTMLListItem -Text "Owners consistent in AD and SYSVOL: ", $Script:Reporting['GPOOwners']['Variables']['IsConsistent'] -FontWeight normal, bold + New-HTMLListItem -Text "Owners not-consistent in AD and SYSVOL: ", $Script:Reporting['GPOOwners']['Variables']['IsNotConsistent'] -FontWeight normal, bold } -FontSize 10pt New-HTMLText -FontSize 10pt -Text "This gives us: " New-HTMLList -Type Unordered { - New-HTMLListItem -Text 'Group Policies requiring owner change: ', $Script:GPOConfiguration['GPOOwners']['Variables']['WillFix'] -FontWeight normal, bold - New-HTMLListItem -Text "Group Policies which can't be fixed (no SYSVOL?): ", $Script:GPOConfiguration['GPOOwners']['Variables']['RequiresDiffFix'] -FontWeight normal, bold - New-HTMLListItem -Text "Group Policies unaffected: ", $Script:GPOConfiguration['GPOOwners']['Variables']['WillNotTouch'] -FontWeight normal, bold + New-HTMLListItem -Text 'Group Policies requiring owner change: ', $Script:Reporting['GPOOwners']['Variables']['WillFix'] -FontWeight normal, bold + New-HTMLListItem -Text "Group Policies which can't be fixed (no SYSVOL?): ", $Script:Reporting['GPOOwners']['Variables']['RequiresDiffFix'] -FontWeight normal, bold + New-HTMLListItem -Text "Group Policies unaffected: ", $Script:Reporting['GPOOwners']['Variables']['WillNotTouch'] -FontWeight normal, bold } -FontSize 10pt } Solution = { @@ -93,13 +93,13 @@ New-HTMLChart { New-ChartBarOptions -Type barStacked New-ChartLegend -Name 'Yes', 'No' -Color LightGreen, Salmon - New-ChartBar -Name 'Is administrative' -Value $Script:GPOConfiguration['GPOOwners']['Variables']['IsAdministrative'], $Script:GPOConfiguration['GPOOwners']['Variables']['IsNotAdministrative'] - New-ChartBar -Name 'Is consistent' -Value $Script:GPOConfiguration['GPOOwners']['Variables']['IsConsistent'], $Script:GPOConfiguration['GPOOwners']['Variables']['IsNotConsistent'] + New-ChartBar -Name 'Is administrative' -Value $Script:Reporting['GPOOwners']['Variables']['IsAdministrative'], $Script:Reporting['GPOOwners']['Variables']['IsNotAdministrative'] + New-ChartBar -Name 'Is consistent' -Value $Script:Reporting['GPOOwners']['Variables']['IsConsistent'], $Script:Reporting['GPOOwners']['Variables']['IsNotConsistent'] } -Title 'Group Policy Owners' -TitleAlignment center } } New-HTMLSection -Name 'Group Policy Owners' { - New-HTMLTable -DataTable $Script:GPOConfiguration['GPOOwners']['Data'] -Filtering { + New-HTMLTable -DataTable $Script:Reporting['GPOOwners']['Data'] -Filtering { New-HTMLTableCondition -Name 'IsOwnerConsistent' -Value $false -BackgroundColor Salmon -ComparisonType string -Row New-HTMLTableCondition -Name 'IsOwnerAdministrative' -Value $false -BackgroundColor Salmon -ComparisonType string -Row } -PagingOptions 10, 20, 30, 40, 50 diff --git a/Private/Invoke.GPOZaurrPassword.ps1 b/Private/Invoke.GPOZaurrPassword.ps1 index ce3bbae..4496058 100644 --- a/Private/Invoke.GPOZaurrPassword.ps1 +++ b/Private/Invoke.GPOZaurrPassword.ps1 @@ -16,6 +16,6 @@ } Solution = { - New-HTMLTable -DataTable $Script:GPOConfiguration['GPOPassword']['Data'] -Filtering + New-HTMLTable -DataTable $Script:Reporting['GPOPassword']['Data'] -Filtering } } \ No newline at end of file diff --git a/Private/Invoke.GPOZaurrPermissions.ps1 b/Private/Invoke.GPOZaurrPermissions.ps1 index 1b75a9e..9135666 100644 --- a/Private/Invoke.GPOZaurrPermissions.ps1 +++ b/Private/Invoke.GPOZaurrPermissions.ps1 @@ -16,6 +16,6 @@ } Solution = { - New-HTMLTable -DataTable $Script:GPOConfiguration['GPOPermissions']['Data'] -Filtering + New-HTMLTable -DataTable $Script:Reporting['GPOPermissions']['Data'] -Filtering } } \ No newline at end of file diff --git a/Private/Invoke.GPOZaurrPermissionsRoot.ps1 b/Private/Invoke.GPOZaurrPermissionsRoot.ps1 index 964fcc8..5df1e9d 100644 --- a/Private/Invoke.GPOZaurrPermissionsRoot.ps1 +++ b/Private/Invoke.GPOZaurrPermissionsRoot.ps1 @@ -16,6 +16,6 @@ } Solution = { - New-HTMLTable -DataTable $Script:GPOConfiguration['GPOPermissionsRoot']['Data'] -Filtering + New-HTMLTable -DataTable $Script:Reporting['GPOPermissionsRoot']['Data'] -Filtering } } \ No newline at end of file diff --git a/Private/Invoke.GPOZaurrSysVolLegacyFiles.ps1 b/Private/Invoke.GPOZaurrSysVolLegacyFiles.ps1 index e01d131..5d77e35 100644 --- a/Private/Invoke.GPOZaurrSysVolLegacyFiles.ps1 +++ b/Private/Invoke.GPOZaurrSysVolLegacyFiles.ps1 @@ -16,6 +16,6 @@ } Solution = { - New-HTMLTable -DataTable $Script:GPOConfiguration['SysVolLegacyFiles']['Data'] -Filtering + New-HTMLTable -DataTable $Script:Reporting['SysVolLegacyFiles']['Data'] -Filtering } } \ No newline at end of file diff --git a/Private/Reset-GPOZaurrStatus.ps1 b/Private/Reset-GPOZaurrStatus.ps1 index a9e1d90..7cd6dbf 100644 --- a/Private/Reset-GPOZaurrStatus.ps1 +++ b/Private/Reset-GPOZaurrStatus.ps1 @@ -2,11 +2,11 @@ param( ) - if (-not $Script:GPOConfigurationClean) { - $Script:GPOConfigurationClean = Copy-Dictionary -Dictionary $Script:GPOConfiguration - } else { - $Script:GPOConfiguration = Copy-Dictionary -Dictionary $Script:GPOConfigurationClean - } + #if (-not $Script:GPOConfigurationClean) { + # $Script:GPOConfigurationClean = Copy-Dictionary -Dictionary $Script:GPOConfiguration + #} else { + # $Script:GPOConfiguration = Copy-Dictionary -Dictionary $Script:GPOConfigurationClean + #} if (-not $Script:DefaultTypes) { $Script:DefaultTypes = foreach ($T in $Script:GPOConfiguration.Keys) { if ($Script:GPOConfiguration[$T].Enabled) { diff --git a/Public/Invoke-GPOZaurr.ps1 b/Public/Invoke-GPOZaurr.ps1 index 399f4be..4bad81c 100644 --- a/Public/Invoke-GPOZaurr.ps1 +++ b/Public/Invoke-GPOZaurr.ps1 @@ -43,12 +43,23 @@ foreach ($T in $Script:GPOConfiguration.Keys) { if ($Script:GPOConfiguration[$T].Enabled -eq $true) { + $Script:Reporting[$T] = [ordered] @{ + Name = $Script:GPOConfiguration[$T].Name + Action = $null + Data = $null + Errors = $null + Warnings = $null + Time = $null + Variables = Copy-Dictionary -Dictionary $Script:GPOConfiguration[$T]['Variables'] + } $TimeLogGPOList = Start-TimeLog Write-Color -Text '[i]', '[Start] ', $($Script:GPOConfiguration[$T]['Name']) -Color Yellow, DarkGray, Yellow - $Script:GPOConfiguration[$T]['Data'] = & $Script:GPOConfiguration[$T]['Execute'] - & $Script:GPOConfiguration[$T]['Processing'] - + $Script:Reporting[$T]['Data'] = Invoke-Command -ScriptBlock $Script:GPOConfiguration[$T]['Execute'] -WarningVariable CommandWarnings -ErrorVariable CommandErrors + Invoke-Command -ScriptBlock $Script:GPOConfiguration[$T]['Processing'] + $Script:Reporting[$T]['Warnings'] = $CommandWarnings + $Script:Reporting[$T]['Errors'] = $CommandErrors $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 } } @@ -92,8 +103,7 @@ $TimeLogEndHTML = Stop-TimeLog -Time $TimeLogHTML -Option OneLiner Write-Color -Text '[i]', '[HTML ] ', 'Generating HTML report', " [Time to execute: $TimeLogEndHTML]" -Color Yellow, DarkGray, Yellow, DarkGray if ($PassThru) { - $OutputData = Export-GPOZaurr - $OutputData + $Script:Reporting } Reset-GPOZaurrStatus # This makes sure types are at it's proper status