Tasks/210-Remove-ABWindowsCapabilities.ps1
|
function Remove-ABWindowsCapabilities { <# .SYNOPSIS Removes preinstalled Windows capabilities (features on demand). .PARAMETER CapabilityNames Capability names as returned by Get-WindowsCapability -Online, excluding the tildes and version (e.g. App.StepsRecorder), one per line. #> [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [string[]] $CapabilityNames ) # This can fail (e.g. 0x800f0800 on some OEM images); the error is logged by Invoke-ABTask $installed = Get-WindowsCapability -Online -ErrorAction Stop | Where-Object { $_.State -eq 'Installed' } foreach ($capability in $installed) { if ($CapabilityNames -contains $capability.Name.Split('~')[0]) { Write-ABLog "Removing Windows capability: $($capability.Name)" try { Remove-WindowsCapability -Online -Name $capability.Name -ErrorAction Stop | Out-Null } catch { Write-ABLog " Unable to remove Windows capability: $_" } } } } |