Both Remove-WindowsFeature
and Uninstall-WindowsFeature
serve the purpose of removing Windows features, but they belong to different PowerShell module generations:
# Windows Server 2008 R2 approach
Remove-WindowsFeature -Name Web-Server
# Windows Server 2012+ approach
Uninstall-WindowsFeature -Name Web-Server
The key distinction stems from Microsoft's module restructuring:
- ServerManager module (2008 R2): Uses
Add-WindowsFeature
/Remove-WindowsFeature
- Dism module (2012+): Uses
Install-WindowsFeature
/Uninstall-WindowsFeature
While both commands achieve similar results, the newer version offers enhanced capabilities:
# Additional parameters in 2012+ version
Uninstall-WindowsFeature -Name FS-FileServer -Restart -Remove
Important implementation notes:
- Windows Server 2008 R2 only supports the ServerManager module
- Windows 8/Server 2012 introduced the Dism module as replacement
- Some features may require different naming conventions between versions
When working across versions, consider this compatibility pattern:
# Version detection and command selection
if ((Get-WindowsFeature -ErrorAction SilentlyContinue) -ne $null) {
# Server 2012+ environment
Uninstall-WindowsFeature -Name XPS-Viewer
} else {
# Server 2008 R2 environment
Remove-WindowsFeature -Name XPS-Viewer
}
The behavioral differences you might encounter:
- Different return object structures
- Varying reboot requirement handling
- Alternative progress reporting mechanisms
For maintainable scripts:
- Always specify the
-Name
parameter explicitly - Include error handling for version compatibility
- Document which server versions your scripts support
try {
Uninstall-WindowsFeature -Name Telnet-Client -ErrorAction Stop
} catch [System.InvalidOperationException] {
Write-Warning "Falling back to ServerManager module"
Remove-WindowsFeature -Name Telnet-Client
}
The PowerShell cmdlets for managing Windows features have evolved significantly across different Windows Server versions. In Windows Server 2008 R2, administrators used:
Add-WindowsFeature
Remove-WindowsFeature
Starting with Windows Server 2012 and Windows 8, Microsoft introduced a new set of cmdlets:
Install-WindowsFeature
Uninstall-WindowsFeature
Remove-WindowsFeature simply removes the feature components from the system but keeps the installation files available in the component store (WinSxS folder). This allows for quick re-addition of the feature later.
Uninstall-WindowsFeature performs a more thorough removal by:
- Completely removing feature binaries from disk
- Cleaning up dependencies when possible
- Freeing up disk space by removing source files
Basic feature removal (Windows Server 2008 R2 style):
Remove-WindowsFeature -Name Web-Server -WhatIf
Remove-WindowsFeature -Name Telnet-Client -Restart
Modern feature uninstallation (Windows Server 2012+):
Uninstall-WindowsFeature -Name Web-Server -Remove
Uninstall-WindowsFeature -Name XPS-Viewer -Confirm:$false
The -Remove
parameter in Uninstall-WindowsFeature is particularly important:
# Keeps feature source files (similar to Remove-WindowsFeature behavior)
Uninstall-WindowsFeature -Name PowerShell-ISE
# Completely removes feature including source files
Uninstall-WindowsFeature -Name PowerShell-ISE -Remove
When writing cross-version scripts, you might need version detection:
$OSVersion = [System.Environment]::OSVersion.Version
if ($OSVersion -ge [Version]"6.2") {
Uninstall-WindowsFeature -Name InkSupport
} else {
Remove-WindowsFeature -Name InkSupport
}
- Always test feature removal in non-production first
- Use -WhatIf parameter to preview changes
- Consider using -Restart when dealing with features that require reboot
- Document removed features for future reference