Tasks/200-Disable-ABOptionalFeatures.ps1

function Disable-ABOptionalFeatures {
    <#
    .SYNOPSIS
    Disables Windows optional features.
    .PARAMETER FeatureNames
    Feature names as returned by Get-WindowsOptionalFeature -Online, one per line.
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)] [string[]] $FeatureNames
    )

    $enabledFeatures = Get-WindowsOptionalFeature -Online -ErrorAction Stop | Where-Object { $_.State -eq 'Enabled' }
    foreach ($feature in $enabledFeatures) {
        if ($FeatureNames -contains $feature.FeatureName) {
            Write-ABLog "Disabling optional feature: $($feature.FeatureName)"
            try {
                Disable-WindowsOptionalFeature -Online -FeatureName $feature.FeatureName -NoRestart -ErrorAction Stop | Out-Null
            }
            catch {
                Write-ABLog " Unable to disable optional feature: $_"
            }
        }
    }
}