The previously-supported Uninstall-WindowsFeature cmdlet has been enhanced with a new argument: -Remove.
When used, the cmdlet will not only uninstall the feature (if installed), it will remove the installer code from the WinSxS. Additionally, a feature that's not installed—but still available in the SxS folder—can be removed as well.
This is particularly valuable when a server VM is fully-deployed and you don't need any additional features; simply run the following cmdlet to remove all that extra cruft:
Get-WindowsFeature | where {$_.InstallState -Eq "Available"} | Uninstall-WindowsFeature -Remove
But what if you need one of those removed features back? There are several mechanisms available; the most transparent one is to use the Add-WindowsFeature cmdlet while connected to the Internet (or with network access to the local Windows Server Update Services host defined in the domain policy). In this use case, the system will retrieve a network copy of the feature and install it.
It might be more efficient, however, to use a readily-available ISO; in that case, you mount the ISO file to the VM and use the -source argument to specify the image for installing the feature:
Add-WindowsFeature $feature -Source:WIM:D:\sources\install.wim:1
There is a bit of a trick in there, too: what's that index number at the end of the source specification? The WIM (Windows IMage) file can contain multiple images; you specify the appropriate image index for the OS edition you're managing. How do you know which index to choose? Use the dism command:
dism /Get-WimInfo /WimFile:D:\Sources\install.wim
Personally, I'm going with a thin-and-trim template for my Server 2012 VMs:
- Install the Server Core version
- Add the "Minimal GUI" management interface
Install-WindowsFeature Server-Gui-Mgmt-Infra - Remove all the available features (above)
- Create a custom unattended sysprep configuration file
With this as a base template, I can easily add needed features (including the full server GUI) from a datastore-based ISO, always accessible to the VM.