src/Private/Backup/Get-CleanupRule.ps1
|
function Get-CleanupRule{ [CmdletBinding()] [OutputType([System.Collections.Hashtable])] param( [Alias("Software")] [string[]]$Profile ) Write-RenderKitLog -Level Debug -Message "Get-CleanupRules started: ProfileCount=$(@($Profile).Count)." $profiles = Get-BackupCleanupProfile $requestedProfiles = @( $Profile | Where-Object { -not [string]::IsNullOrWhiteSpace($_) } | ForEach-Object { $_.Trim() } | Sort-Object -Unique ) if ($requestedProfiles.Count -eq 0) { Write-RenderKitLog -Level Warning -Message "No cleanup profiles specified. Using default profile 'General'." $requestedProfiles = @("General") } $unknownProfiles = @( $requestedProfiles | Where-Object { -not $profiles.ContainsKey($_) } ) if ($unknownProfiles.Count -gt 0) { $available = @($profiles.Keys | Sort-Object) -join ", " Write-RenderKitLog -Level Error -Message "Unknown backup profile(s): $($unknownProfiles -join ', '). Available profiles: $available." throw "Unknown backup profile(s): $($unknownProfiles -join ', '). Available profiles: $available." } $folders = New-Object System.Collections.Generic.List[string] $extensions = New-Object System.Collections.Generic.List[string] foreach ($profileName in $requestedProfiles){ $profile = $profiles[$profileName] if (-not $profile) { continue } foreach ($folder in @($profile.Folders)) { if ([string]::IsNullOrWhiteSpace($folder)) { continue } $folders.Add($folder.Trim()) } foreach ($extension in @($profile.Extensions)) { if ([string]::IsNullOrWhiteSpace($extension)) { continue } $normalizedExtension = $extension.Trim().ToLowerInvariant() if (-not $normalizedExtension.StartsWith(".")) { $normalizedExtension = ".$normalizedExtension" } $extensions.Add($normalizedExtension) } } return @{ Profiles = @($requestedProfiles) Folders = @($folders | Sort-Object -Unique) Extensions = @($extensions | Sort-Object -Unique) } } |