mirror of
https://github.com/EvotecIT/GPOZaurr.git
synced 2026-07-26 20:00:09 +00:00
Compare commits
29 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b5d69c8a1f | |||
| 32dc6ac661 | |||
| 300d6f63c5 | |||
| 1f43816804 | |||
| 5d50536f5a | |||
| 4da232a1be | |||
| fb5fa00dce | |||
| 970080bfad | |||
| 845c2124bd | |||
| 14d33aa2a6 | |||
| d596fd31fc | |||
| a5cf96398c | |||
| 68921b7fc7 | |||
| ab8443d450 | |||
| 386af088ae | |||
| ad0903e4d9 | |||
| 91ff9da014 | |||
| a262ba531f | |||
| ea7b4f1bd8 | |||
| 09cbd6ca27 | |||
| ddd2139ebd | |||
| ca6e90f399 | |||
| 90931d5c80 | |||
| bfd45c0604 | |||
| 231c2951e0 | |||
| faea9753ae | |||
| 4c49406a6c | |||
| f3d73abed4 | |||
| 620ce6cd61 |
@@ -33,7 +33,7 @@ $Configuration = @{
|
||||
|
||||
RequiredModules = @(
|
||||
@{ ModuleName = 'PSSharedGoods'; ModuleVersion = 'Latest'; Guid = 'ee272aa8-baaa-4edf-9f45-b6d6f7d844fe' }
|
||||
@{ ModuleName = 'ADEssentials'; ModuleVersion = 'Latest'; Guid = '9fc9fd61-7f11-4f4b-a527-084086f1905f' }
|
||||
@{ ModuleName = 'ADEssentials'; ModuleVersion = '0.0.148'; Guid = '9fc9fd61-7f11-4f4b-a527-084086f1905f' }
|
||||
@{ ModuleName = 'PSWriteHTML'; ModuleVersion = "Latest"; Guid = 'a7bdf640-f5cb-4acf-9de0-365b322d245c' }
|
||||
)
|
||||
ExternalModuleDependencies = @(
|
||||
@@ -224,7 +224,7 @@ $Configuration = @{
|
||||
RemoveComments = $false
|
||||
}
|
||||
Integrate = @{
|
||||
ApprovedModules = 'PSSharedGoods', 'PSWriteColor', 'Connectimo', 'PSUnifi', 'PSWebToolbox', 'PSMyPassword', 'ADEssentials'
|
||||
ApprovedModules = 'PSSharedGoods', 'PSWriteColor', 'Connectimo', 'PSUnifi', 'PSWebToolbox', 'PSMyPassword', 'ADEssentials', 'PSPublishModule'
|
||||
}
|
||||
}
|
||||
Standard = @{
|
||||
@@ -253,6 +253,9 @@ $Configuration = @{
|
||||
Style = @{
|
||||
PSD1 = 'Minimal' # Native
|
||||
}
|
||||
Signing = @{
|
||||
CertificateThumbprint = '36A8A2D0E227D81A2D3B60DCE0CFCF23BEFC343B'
|
||||
}
|
||||
}
|
||||
Steps = @{
|
||||
BuildModule = @{ # requires Enable to be on to process all of that
|
||||
|
||||
@@ -1,5 +1,29 @@
|
||||
# GPOZaurr Release History
|
||||
|
||||
## 0.0.160 - 2023.05.26
|
||||
- Fixes `Remove-GPOZaurr` limit processing feature which would not stop in some cases
|
||||
|
||||
## 0.0.159
|
||||
- Fixes [#44 Extra spaces in property name 'Id' in Get-GPOZaurrPermissionConsistency?](https://github.com/EvotecIT/GPOZaurr/issues/44)
|
||||
- Fixes typos [#43](https://github.com/EvotecIT/GPOZaurr/pull/43)
|
||||
|
||||
## 0.0.158 - 2023.03.07
|
||||
- Improve detection of empty OUs by including AD printers.
|
||||
|
||||
## 0.0.157 - 2022.12.16
|
||||
- Resolves *Group Policy Content - GPO Subfolders for Google Chrome* [#38](https://github.com/EvotecIT/GPOZaurr/issues/38)
|
||||
- Resolves *Filename processing issue* [#37](https://github.com/EvotecIT/GPOZaurr/issues/37)
|
||||
|
||||
## 0.0.156 - 2022.12.04
|
||||
- Fixes `Get-LocalComputerSid - Error: You cannot call a method on a null-valued expression` in some rare cases [#34](https://github.com/EvotecIT/GPOZaurr/issues/34)
|
||||
|
||||
## 0.0.155 - 2022.10.27
|
||||
- Fixes `Invoke-GPOZaurr` SplitReports functionality (again! and again!) [#35](https://github.com/EvotecIT/GPOZaurr/issues/35)
|
||||
|
||||
## 0.0.154 - 2022.10.20
|
||||
- Fixes `Invoke-GPOZaurr` SplitReports functionality (again!) [#33](https://github.com/EvotecIT/GPOZaurr/issues/33)
|
||||
- Fixes Sysvol property in object returned by Get-GPOZaurrPermissionConsistency contains whitespace [#31](https://github.com/EvotecIT/GPOZaurr/issues/31)
|
||||
|
||||
## 0.0.153 - 2022.09.12
|
||||
- Fixes `Invoke-GPOZaurr` SplitReports functionality that would generate main report anyways.
|
||||
|
||||
|
||||
+6
-6
@@ -4,30 +4,30 @@
|
||||
CmdletsToExport = @()
|
||||
CompanyName = 'Evotec'
|
||||
CompatiblePSEditions = @('Desktop')
|
||||
Copyright = '(c) 2011 - 2022 Przemyslaw Klys @ Evotec. All rights reserved.'
|
||||
Copyright = '(c) 2011 - 2023 Przemyslaw Klys @ Evotec. All rights reserved.'
|
||||
Description = 'Group Policy Eater is a PowerShell module that aims to gather information about Group Policies but also allows fixing issues that you may find in them.'
|
||||
FunctionsToExport = @('Add-GPOPermission', 'Add-GPOZaurrPermission', 'Backup-GPOZaurr', 'Clear-GPOZaurrSysvolDFSR', 'ConvertFrom-CSExtension', 'Export-GPOZaurrContent', 'Find-CSExtension', 'Get-GPOZaurr', 'Get-GPOZaurrAD', 'Get-GPOZaurrBackupInformation', 'Get-GPOZaurrBroken', 'Get-GPOZaurrBrokenLink', 'Get-GPOZaurrDictionary', 'Get-GPOZaurrDuplicateObject', 'Get-GPOZaurrFiles', 'Get-GPOZaurrFilesPolicyDefinition', 'Get-GPOZaurrFolders', 'Get-GPOZaurrInheritance', 'Get-GPOZaurrLegacyFiles', 'Get-GPOZaurrLink', 'Get-GPOZaurrLinkSummary', 'Get-GPOZaurrNetLogon', 'Get-GPOZaurrOrganizationalUnit', 'Get-GPOZaurrOwner', 'Get-GPOZaurrPassword', 'Get-GPOZaurrPermission', 'Get-GPOZaurrPermissionAnalysis', 'Get-GPOZaurrPermissionConsistency', 'Get-GPOZaurrPermissionIssue', 'Get-GPOZaurrPermissionRoot', 'Get-GPOZaurrPermissionSummary', 'Get-GPOZaurrSysvolDFSR', 'Get-GPOZaurrUpdates', 'Get-GPOZaurrWMI', 'Invoke-GPOZaurr', 'Invoke-GPOZaurrContent', 'Invoke-GPOZaurrPermission', 'Invoke-GPOZaurrSupport', 'New-GPOZaurrWMI', 'Optimize-GPOZaurr', 'Remove-GPOPermission', 'Remove-GPOZaurr', 'Remove-GPOZaurrBroken', 'Remove-GPOZaurrDuplicateObject', 'Remove-GPOZaurrFolders', 'Remove-GPOZaurrLegacyFiles', 'Remove-GPOZaurrLinkEmptyOU', 'Remove-GPOZaurrPermission', 'Remove-GPOZaurrWMI', 'Repair-GPOZaurrBrokenLink', 'Repair-GPOZaurrNetLogonOwner', 'Repair-GPOZaurrPermission', 'Repair-GPOZaurrPermissionConsistency', 'Restore-GPOZaurr', 'Save-GPOZaurrFiles', 'Set-GPOOwner', 'Set-GPOZaurrOwner', 'Set-GPOZaurrStatus', 'Skip-GroupPolicy')
|
||||
GUID = 'f7d4c9e4-0298-4f51-ad77-e8e3febebbde'
|
||||
ModuleVersion = '0.0.153'
|
||||
ModuleVersion = '0.0.159'
|
||||
PowerShellVersion = '5.1'
|
||||
PrivateData = @{
|
||||
PSData = @{
|
||||
Tags = @('Windows', 'ActiveDirectory', 'GPO', 'GroupPolicy')
|
||||
ProjectUri = 'https://github.com/EvotecIT/GPOZaurr'
|
||||
Tags = @('Windows', 'ActiveDirectory', 'GPO', 'GroupPolicy')
|
||||
ExternalModuleDependencies = @('CimCmdlets', 'Microsoft.PowerShell.Management', 'Microsoft.PowerShell.Utility', 'Microsoft.PowerShell.Security')
|
||||
}
|
||||
}
|
||||
RequiredModules = @(@{
|
||||
ModuleVersion = '0.0.243'
|
||||
ModuleName = 'PSSharedGoods'
|
||||
ModuleVersion = '0.0.264'
|
||||
Guid = 'ee272aa8-baaa-4edf-9f45-b6d6f7d844fe'
|
||||
}, @{
|
||||
ModuleVersion = '0.0.149'
|
||||
ModuleName = 'ADEssentials'
|
||||
ModuleVersion = '0.0.148'
|
||||
Guid = '9fc9fd61-7f11-4f4b-a527-084086f1905f'
|
||||
}, @{
|
||||
ModuleVersion = '0.0.177'
|
||||
ModuleName = 'PSWriteHTML'
|
||||
ModuleVersion = '0.0.188'
|
||||
Guid = 'a7bdf640-f5cb-4acf-9de0-365b322d245c'
|
||||
}, 'CimCmdlets', 'Microsoft.PowerShell.Management', 'Microsoft.PowerShell.Utility', 'Microsoft.PowerShell.Security')
|
||||
RootModule = 'GPOZaurr.psm1'
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
|
||||
foreach ($OU in $ListOU) {
|
||||
$Domain = ConvertFrom-DistinguishedName -ToDomainCN -DistinguishedName $OU
|
||||
$ObjectsInOu = Get-ADObject -LDAPFilter "(|(ObjectClass=user)(ObjectClass=contact)(ObjectClass=computer)(ObjectClass=group)(objectClass=inetOrgPerson))" -SearchBase $OU -Server $ForestInformation['QueryServers'][$Domain]['hostname'][0]
|
||||
$ObjectsInOu = Get-ADObject -LDAPFilter "(|(ObjectClass=user)(ObjectClass=contact)(ObjectClass=computer)(ObjectClass=group)(objectClass=inetOrgPerson)(ObjectClass=PrintQueue))" -SearchBase $OU -Server $ForestInformation['QueryServers'][$Domain]['hostname'][0]
|
||||
#Write-Verbose "Get-GPOZaurrOrganizationalUnit - Processing $($Domain) / $($TOPOU.DistinguishedName) [$CountTop/$($TopOrganizationalUnits.Count)], found $($ObjectsInOu.Count) objects to process."
|
||||
if (-not $CachedOu[$OU]) {
|
||||
$CachedOu[$OU] = [ordered] @{
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
# in some cases GPResult seems to return an error - this was first noticed by user when using Dutch based system
|
||||
# I am not sure if it's possible to fix this error for users, but once that happens checking if GPO is empty fails using the method below
|
||||
# therefore we will use the old method of assuming something is empty or not empty in such case
|
||||
Write-Warning "Get-XMLGPO - Reading GPO content [$DisplayName/$DomainName] returned an error. This may be because of non-english language. Assesing EMPTY using old method which can report false positives. Be careful please."
|
||||
Write-Warning "Get-XMLGPO - Reading GPO content [$DisplayName/$DomainName] returned an error. This may be because of non-english language. Assessing EMPTY using old method which can report false positives. Be careful please."
|
||||
$OutputUser = @()
|
||||
$OutputComputer = @()
|
||||
} else {
|
||||
@@ -223,7 +223,7 @@
|
||||
} elseif ($ADAdministrativeGroups) {
|
||||
$OwnerType = 'Unknown'
|
||||
} else {
|
||||
$OwnerType = 'Unable to asses (local files?)'
|
||||
$OwnerType = 'Unable to assess (local files?)'
|
||||
}
|
||||
}
|
||||
# Mark GPO as excluded
|
||||
@@ -398,4 +398,4 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -380,6 +380,23 @@
|
||||
ConvertTo-XMLGenericPolicy -GPO $GPO -Category 'FSLogix' -SingleObject
|
||||
}
|
||||
}
|
||||
Firefox = @{
|
||||
Types = @(
|
||||
@{
|
||||
Category = 'RegistrySettings'
|
||||
Settings = 'Policy'
|
||||
}
|
||||
)
|
||||
GPOPath = @(
|
||||
'Policies -> Administrative Templates -> Mozilla -> Firefox'
|
||||
)
|
||||
Code = {
|
||||
ConvertTo-XMLGenericPolicy -GPO $GPO -Category 'Mozilla\Firefox*'
|
||||
}
|
||||
CodeSingle = {
|
||||
ConvertTo-XMLGenericPolicy -GPO $GPO -Category 'Mozilla\Firefox*' -SingleObject
|
||||
}
|
||||
}
|
||||
GoogleChrome = @{
|
||||
Types = @(
|
||||
@{
|
||||
@@ -393,10 +410,10 @@
|
||||
'Policies -> Administrative Templates -> Google Chrome - Default Settings (users can override)'
|
||||
)
|
||||
Code = {
|
||||
ConvertTo-XMLGenericPolicy -GPO $GPO -Category 'Google Chrome', 'Google/Google Chrome', 'Google Chrome - Default Settings (users can override)'
|
||||
ConvertTo-XMLGenericPolicy -GPO $GPO -Category 'Google Chrome*', 'Google/Google Chrome*', 'Google Chrome - Default Settings (users can override)'
|
||||
}
|
||||
CodeSingle = {
|
||||
ConvertTo-XMLGenericPolicy -GPO $GPO -Category 'Google Chrome', 'Google/Google Chrome', 'Google Chrome - Default Settings (users can override)' -SingleObject
|
||||
ConvertTo-XMLGenericPolicy -GPO $GPO -Category 'Google Chrome*', 'Google/Google Chrome*', 'Google Chrome - Default Settings (users can override)' -SingleObject
|
||||
}
|
||||
}
|
||||
GroupPolicy = @{
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
}
|
||||
}
|
||||
# Find all objects in those OUs
|
||||
$ObjectsInOu = Get-ADObject -LDAPFilter "(|(ObjectClass=user)(ObjectClass=contact)(ObjectClass=computer)(ObjectClass=group)(objectClass=inetOrgPerson))" -SearchBase $TopOU.distinguishedName -Server $ForestInformation['QueryServers'][$Domain]['hostname'][0]
|
||||
$ObjectsInOu = Get-ADObject -LDAPFilter "(|(ObjectClass=user)(ObjectClass=contact)(ObjectClass=computer)(ObjectClass=group)(objectClass=inetOrgPerson)(ObjectClass=PrintQueue))" -SearchBase $TopOU.distinguishedName -Server $ForestInformation['QueryServers'][$Domain]['hostname'][0]
|
||||
Write-Verbose "Get-GPOZaurrOrganizationalUnit - Processing $($Domain) / $($TOPOU.DistinguishedName) [$CountTop/$($TopOrganizationalUnits.Count)], found $($ObjectsInOu.Count) objects to process."
|
||||
foreach ($Object in $ObjectsInOu) {
|
||||
$Place = ConvertFrom-DistinguishedName -ToOrganizationalUnit -DistinguishedName $Object.DistinguishedName
|
||||
|
||||
@@ -95,8 +95,8 @@
|
||||
}
|
||||
$Object['Owner'] = $_.Owner # : EVOTEC\Enterprise Admins
|
||||
$Object['Path'] = $_.Path
|
||||
$Object['SysVolPath '] = $SysvolPath
|
||||
$Object['Id '] = $_.Id # : 8a7bc515-d7fd-4d1f-90b8-e47c15f89295
|
||||
$Object['SysVolPath'] = $SysvolPath
|
||||
$Object['Id'] = $_.Id # : 8a7bc515-d7fd-4d1f-90b8-e47c15f89295
|
||||
$Object['GpoStatus'] = $_.GpoStatus # : AllSettingsEnabled
|
||||
$Object['Description'] = $_.Description # :
|
||||
$Object['CreationTime'] = $_.CreationTime # : 04.03.2020 17:19:42
|
||||
|
||||
@@ -195,20 +195,14 @@
|
||||
}
|
||||
}
|
||||
|
||||
if ( -not $SplitReports) {
|
||||
if (-not $SplitReports) {
|
||||
# Generate pretty HTML
|
||||
$TimeLogHTML = Start-TimeLog
|
||||
if (-not $FilePath) {
|
||||
$FilePath = Get-FileName -Extension 'html' -Temporary
|
||||
}
|
||||
|
||||
# Split reports are handled above so we skip if this was set
|
||||
if ($Type.Count -gt 1) {
|
||||
New-HTMLReportWithSplit -FilePath $FilePath -Online:$Online -HideHTML:$HideHTML
|
||||
} else {
|
||||
New-HTMLReportAll -FilePath $FilePath -Online:$Online -HideHTML:$HideHTML -Type $Type
|
||||
}
|
||||
|
||||
New-HTMLReportAll -FilePath $FilePath -Online:$Online -HideHTML:$HideHTML -Type $Type
|
||||
|
||||
$TimeLogEndHTML = Stop-TimeLog -Time $TimeLogHTML -Option OneLiner
|
||||
Write-Color -Text '[i]', '[HTML ] ', 'Generating HTML report', " [Time to execute: $TimeLogEndHTML]" -Color Yellow, DarkGray, Yellow, DarkGray
|
||||
|
||||
@@ -22,11 +22,11 @@
|
||||
$BackupFinalPath = $BackupPath
|
||||
}
|
||||
Write-Verbose "Remove-GPOZaurr - Backing up to $BackupFinalPath"
|
||||
$null = New-Item -ItemType Directory -Path $BackupFinalPath -Force
|
||||
$null = New-Item -ItemType Directory -Path $BackupFinalPath -Force -WhatIf:$false
|
||||
} else {
|
||||
$BackupRequired = $false
|
||||
}
|
||||
$Count = 0
|
||||
$CountProcessedGPO = 0
|
||||
}
|
||||
Process {
|
||||
$getGPOZaurrSplat = @{
|
||||
@@ -39,6 +39,11 @@
|
||||
}
|
||||
|
||||
Get-GPOZaurr @getGPOZaurrSplat | ForEach-Object {
|
||||
if ($LimitProcessing -ne 0 -and $CountProcessedGPO -ge $LimitProcessing) {
|
||||
Write-Warning -Message "Remove-GPOZaurr - LimitProcessing ($CountProcessedGPO / $LimitProcessing) reached. Stopping processing"
|
||||
break
|
||||
}
|
||||
|
||||
$DeleteRequired = $false
|
||||
|
||||
if ($Type -contains 'Empty') {
|
||||
@@ -89,10 +94,7 @@
|
||||
Write-Warning "Remove-GPOZaurr - Removing GPO $($_.DisplayName) from $($_.DomainName) failed: $($_.Exception.Message)"
|
||||
}
|
||||
}
|
||||
$Count++
|
||||
if ($LimitProcessing -eq $Count) {
|
||||
break
|
||||
}
|
||||
$CountProcessedGPO++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user