From 28d941ec261a89bcdf6321a879579c2425ae23c2 Mon Sep 17 00:00:00 2001 From: Przemyslaw Klys Date: Thu, 18 Jun 2020 16:36:35 +0200 Subject: [PATCH] Update --- Examples/Example-14-ListingGPOsPerOU3.ps1 | 4 +- Examples/Example-14-ListingGPOsPerOU4.ps1 | 2 +- ...le-14-ListingGPOsPerOURemoveDuplicates.ps1 | 5 +++ GPOZaurr.psd1 | 2 +- Public/Get-GPOZaurrLink.ps1 | 39 +++++++++++++++++-- 5 files changed, 45 insertions(+), 7 deletions(-) create mode 100644 Examples/Example-14-ListingGPOsPerOURemoveDuplicates.ps1 diff --git a/Examples/Example-14-ListingGPOsPerOU3.ps1 b/Examples/Example-14-ListingGPOsPerOU3.ps1 index 84feac5..5a1a7cf 100644 --- a/Examples/Example-14-ListingGPOsPerOU3.ps1 +++ b/Examples/Example-14-ListingGPOsPerOU3.ps1 @@ -1,5 +1,5 @@ Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force -Get-ADOrganizationalUnit -Filter * -Properties distinguishedName, LinkedGroupPolicyObjects | Get-GPOZaurrLink | Format-Table -Get-ADObject -Filter * -Properties distinguishedName, gplink -Server 'ad.evotec.pl' | Get-GPOZaurrLink | Format-Table -AutoSize +#Get-ADOrganizationalUnit -Filter * -Properties distinguishedName, LinkedGroupPolicyObjects | Get-GPOZaurrLink | Format-Table +#Get-ADObject -Filter * -Properties distinguishedName, gplink -Server 'ad.evotec.pl' | Get-GPOZaurrLink | Format-Table -AutoSize Get-GPOZaurrLink | Format-Table -AutoSize \ No newline at end of file diff --git a/Examples/Example-14-ListingGPOsPerOU4.ps1 b/Examples/Example-14-ListingGPOsPerOU4.ps1 index a0166ed..0503701 100644 --- a/Examples/Example-14-ListingGPOsPerOU4.ps1 +++ b/Examples/Example-14-ListingGPOsPerOU4.ps1 @@ -1,3 +1,3 @@ Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force -Get-GPOZaurrLink -Linked 'Root' -IncludeDomains 'ad.evotec.pl' | ft \ No newline at end of file +Get-GPOZaurrLink -Linked 'Root' -IncludeDomains 'ad.evotec.pl' | Format-Table \ No newline at end of file diff --git a/Examples/Example-14-ListingGPOsPerOURemoveDuplicates.ps1 b/Examples/Example-14-ListingGPOsPerOURemoveDuplicates.ps1 new file mode 100644 index 0000000..6a5e00b --- /dev/null +++ b/Examples/Example-14-ListingGPOsPerOURemoveDuplicates.ps1 @@ -0,0 +1,5 @@ +Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force + +Get-GPOZaurrLink -SearchBase "OU=ITR01,DC=ad,DC=evotec,DC=xyz" -Verbose | Format-Table -a * + +Get-GPOZaurrLink -SearchBase "OU=ITR01,DC=ad,DC=evotec,DC=xyz" -SkipDuplicates | Format-Table -a * \ No newline at end of file diff --git a/GPOZaurr.psd1 b/GPOZaurr.psd1 index 554de6f..ff5954c 100644 --- a/GPOZaurr.psd1 +++ b/GPOZaurr.psd1 @@ -7,7 +7,7 @@ Description = 'Group Policy Eater' FunctionsToExport = 'Add-GPOPermission', 'Add-GPOZaurrPermission', 'Backup-GPOZaurr', 'Get-GPOZaurr', 'Get-GPOZaurrAD', 'Get-GPOZaurrBackupInformation', 'Get-GPOZaurrLegacyFiles', 'Get-GPOZaurrLink', 'Get-GPOZaurrLinkSummary', 'Get-GPOZaurrOwner', 'Get-GPOZaurrPassword', 'Get-GPOZaurrPermission', 'Get-GPOZaurrPermissionConsistency', 'Get-GPOZaurrSysvol', 'Get-WMIFilter', 'Get-GPOZaurrWMI', 'Invoke-GPOZaurrPermission', 'New-GPOZaurrWMI', 'Remove-GPOPermission', 'Remove-GPOZaurr', 'Remove-GPOZaurrLegacyFiles', 'Remove-GPOZaurrOrphanedSysvolFolders', 'Remove-GPOZaurrPermission', 'Remove-GPOZaurrWMI', 'Repair-GPOZaurrPermissionConsistency', 'Restore-GPOZaurr', 'Save-GPOZaurrFiles', 'Set-GPOOwner', 'Set-GPOZaurrOwner' GUID = 'f7d4c9e4-0298-4f51-ad77-e8e3febebbde' - ModuleVersion = '0.0.39' + ModuleVersion = '0.0.40' PowerShellVersion = '5.1' PrivateData = @{ PSData = @{ diff --git a/Public/Get-GPOZaurrLink.ps1 b/Public/Get-GPOZaurrLink.ps1 index 0b6fbc4..ef475e0 100644 --- a/Public/Get-GPOZaurrLink.ps1 +++ b/Public/Get-GPOZaurrLink.ps1 @@ -79,7 +79,18 @@ $Splat['SearchBase'] = $SearchBase $ADObjectGPO = Get-ADObject @Splat foreach ($_ in $ADObjectGPO) { - Get-PrivGPOZaurrLink -Object $_ -Limited:$Limited.IsPresent -GPOCache $GPOCache + $OutputGPOs = Get-PrivGPOZaurrLink -Object $_ -Limited:$Limited.IsPresent -GPOCache $GPOCache + foreach ($OutputGPO in $OutputGPOs) { + if (-not $SkipDuplicates) { + $OutputGPO + } else { + $UniqueGuid = -join ($OutputGPO.DomainName, $OutputGPO.Guid) + if (-not $CacheReturnedGPOs[$UniqueGuid]) { + $CacheReturnedGPOs[$UniqueGuid] = $OutputGPO + $OutputGPO + } + } + } } } if ($Linked -contains 'Root') { @@ -92,7 +103,18 @@ $Splat['SearchBase'] = $SearchBase $ADObjectGPO = Get-ADObject @Splat foreach ($_ in $ADObjectGPO) { - Get-PrivGPOZaurrLink -Object $_ -Limited:$Limited.IsPresent -GPOCache $GPOCache + $OutputGPOs = Get-PrivGPOZaurrLink -Object $_ -Limited:$Limited.IsPresent -GPOCache $GPOCache + foreach ($OutputGPO in $OutputGPOs) { + if (-not $SkipDuplicates) { + $OutputGPO + } else { + $UniqueGuid = -join ($OutputGPO.DomainName, $OutputGPO.Guid) + if (-not $CacheReturnedGPOs[$UniqueGuid]) { + $CacheReturnedGPOs[$UniqueGuid] = $OutputGPO + $OutputGPO + } + } + } } } if ($Linked -contains 'Site') { @@ -126,7 +148,18 @@ } elseif ($_.DistinguishedName -eq $ForestInformation['DomainsExtended'][$Domain]['DomainControllersContainer']) { # other skips Domain Controllers } else { - Get-PrivGPOZaurrLink -Object $_ -Limited:$Limited.IsPresent -GPOCache $GPOCache + $OutputGPOs = Get-PrivGPOZaurrLink -Object $_ -Limited:$Limited.IsPresent -GPOCache $GPOCache + foreach ($OutputGPO in $OutputGPOs) { + if (-not $SkipDuplicates) { + $OutputGPO + } else { + $UniqueGuid = -join ($OutputGPO.DomainName, $OutputGPO.Guid) + if (-not $CacheReturnedGPOs[$UniqueGuid]) { + $CacheReturnedGPOs[$UniqueGuid] = $OutputGPO + $OutputGPO + } + } + } } } }