src/filters/FilterByExclusion.ps1
|
#Requires -Version 5.1 function Get-FilteredCoursesByExclusion { <# .SYNOPSIS Filters out courses matching exclusion patterns. .DESCRIPTION Returns courses that do NOT match any of the exclusion regex patterns. Useful for removing courses by keywords like 'Private Lessons' or 'VIP'. .PARAMETER Courses Array of course objects with 'name' property. .PARAMETER ExcludePatterns Array of regex patterns for courses to exclude. .OUTPUTS Array of course objects that do not match any exclusion pattern. .EXAMPLE $patterns = @('Privatunterricht', 'VIP', 'Geschlossen') Get-FilteredCoursesByExclusion -Courses $courses -ExcludePatterns $patterns .NOTES Case-insensitive regex matching. Returns all courses if patterns is null/empty. #> [CmdletBinding()] param([ValidateNotNull()][object[]]$Courses, [ValidateNotNull()][string[]]$ExcludePatterns) if (-not $Courses -or -not $ExcludePatterns) { return $Courses } $filtered = @() foreach ($course in $Courses) { $shouldExclude = $false foreach ($pattern in $ExcludePatterns) { if ($course.name -match $pattern) { $shouldExclude = $true; break } } if (-not $shouldExclude) { $filtered += $course } } return $filtered } |