From 4c0647b81f7abcddf7f2e649e95be01ec0548d0d Mon Sep 17 00:00:00 2001 From: Przemyslaw Klys Date: Tue, 26 May 2020 19:03:21 +0200 Subject: [PATCH] Remove Orphaned Sysvol Folders --- .../Example-20-RemoveOrphanedFoldersSysvol.ps1 | 3 +++ GPOZaurr.psd1 | 4 ++-- Public/Get-GPOZaurrSysvol.ps1 | 16 ++++++++++------ Public/Remove-GPOZaurrOrphanedSysvolFolders.ps1 | 13 +++++++++++++ 4 files changed, 28 insertions(+), 8 deletions(-) create mode 100644 Examples/Example-20-RemoveOrphanedFoldersSysvol.ps1 create mode 100644 Public/Remove-GPOZaurrOrphanedSysvolFolders.ps1 diff --git a/Examples/Example-20-RemoveOrphanedFoldersSysvol.ps1 b/Examples/Example-20-RemoveOrphanedFoldersSysvol.ps1 new file mode 100644 index 0000000..dd55d73 --- /dev/null +++ b/Examples/Example-20-RemoveOrphanedFoldersSysvol.ps1 @@ -0,0 +1,3 @@ +Import-Module "$PSScriptRoot\..\GPoZaurr.psd1" -Force + +Remove-GPOZaurrOrphanedSysvolFolders -Verbose -WhatIf \ No newline at end of file diff --git a/GPOZaurr.psd1 b/GPOZaurr.psd1 index b741fea..8c35928 100644 --- a/GPOZaurr.psd1 +++ b/GPOZaurr.psd1 @@ -5,9 +5,9 @@ CompatiblePSEditions = 'Desktop' Copyright = '(c) 2011 - 2020 Przemyslaw Klys @ Evotec. All rights reserved.' Description = 'Group Policy Eater' - FunctionsToExport = 'Add-GPOPermission', 'Add-GPOZaurrPermission', 'Backup-GPOZaurr', 'Get-GPOZaurr', 'Get-GPOZaurrAD', 'Get-GPOZaurrBackupInformation', 'Get-GPOZaurrLink', 'Get-GPOZaurrOwner', 'Get-GPOZaurrPassword', 'Get-GPOZaurrPermission', 'Get-GPOZaurrPermissionConsistency', 'Get-GPOZaurrSysvol', 'Get-GPOZaurrWMI', 'Invoke-GPOZaurrPermission', 'New-GPOZaurrWMI', 'Remove-GPOPermission', 'Remove-GPOZaurr', 'Remove-GPOZaurrPermission', 'Remove-GPOZaurrWMI', 'Repair-GPOZaurrPermissionConsistency', 'Restore-GPOZaurr', 'Save-GPOZaurrFiles', 'Set-GPOOwner', 'Set-GPOZaurrOwner' + FunctionsToExport = 'Add-GPOPermission', 'Add-GPOZaurrPermission', 'Backup-GPOZaurr', 'Get-GPOZaurr', 'Get-GPOZaurrAD', 'Get-GPOZaurrBackupInformation', 'Get-GPOZaurrLink', 'Get-GPOZaurrOwner', 'Get-GPOZaurrPassword', 'Get-GPOZaurrPermission', 'Get-GPOZaurrPermissionConsistency', 'Get-GPOZaurrSysvol', 'Get-WMIFilter', 'Get-GPOZaurrWMI', 'Invoke-GPOZaurrPermission', 'New-GPOZaurrWMI', 'Remove-GPOPermission', 'Remove-GPOZaurr', '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.30' + ModuleVersion = '0.0.31' PowerShellVersion = '5.1' PrivateData = @{ PSData = @{ diff --git a/Public/Get-GPOZaurrSysvol.ps1 b/Public/Get-GPOZaurrSysvol.ps1 index 57a469d..19053ee 100644 --- a/Public/Get-GPOZaurrSysvol.ps1 +++ b/Public/Get-GPOZaurrSysvol.ps1 @@ -21,13 +21,17 @@ Write-Warning "Get-GPOZaurrSysvol - Couldn't get GPOs from $Domain. Error: $($_.Exception.Message)" continue } - if (-not $VerifyDomainControllers) { - Test-SysVolFolders -GPOs $GPOs -Server $Domain -Domain $Domain - } else { - foreach ($Server in $ForestInformation['DomainDomainControllers']["$Domain"]) { - Write-Verbose "Get-WinADGPOSysvolFolders - Processing $Domain \ $($Server.HostName.Trim())" - Test-SysVolFolders -GPOs $GPOs -Server $Server.Hostname -Domain $Domain + if ($GPOs.Count -ge 2) { + if (-not $VerifyDomainControllers) { + Test-SysVolFolders -GPOs $GPOs -Server $Domain -Domain $Domain + } else { + foreach ($Server in $ForestInformation['DomainDomainControllers']["$Domain"]) { + Write-Verbose "Get-GPOZaurrSysvol - Processing $Domain \ $($Server.HostName.Trim())" + Test-SysVolFolders -GPOs $GPOs -Server $Server.Hostname -Domain $Domain + } } + } else { + Write-Warning "Get-GPOZaurrSysvol - GPO count for $Domain is less then 2. This is not expected for fully functioning domain. Skipping processing SYSVOL folder." } } } \ No newline at end of file diff --git a/Public/Remove-GPOZaurrOrphanedSysvolFolders.ps1 b/Public/Remove-GPOZaurrOrphanedSysvolFolders.ps1 new file mode 100644 index 0000000..b767e3f --- /dev/null +++ b/Public/Remove-GPOZaurrOrphanedSysvolFolders.ps1 @@ -0,0 +1,13 @@ +function Remove-GPOZaurrOrphanedSysvolFolders { + [cmdletBinding(SupportsShouldProcess)] + param( + [int] $LimitProcessing = [int32]::MaxValue + ) + Get-GPOZaurrSysvol | Where-Object { + if ($_.Status -eq 'Orphaned GPO') { + $_ + } + } | Select-Object | Select-Object -First $LimitProcessing | ForEach-Object { + Remove-Item -Recurse -Force -LiteralPath $_.Path + } +} \ No newline at end of file