Deltas Between Windows Server 2016 “Desktop Experience” and “Core”

Context

In working with customers building migration plans for Windows Server 'X' to Windows Server 2016, one of the new things to be aware of is that you can no longer "move" between a "Core" install and a "Full"/"Desktop Experience" install. Even further is that Core now only supports a subset of features of "Desktop Experience" version. This is identified on Technet where supported workloads for Core are documented. However, I found that that said detail was not enough to interrogate the environment to determine which servers could vs. could not be upgraded to Core (preferred).

https://technet.microsoft.com/en-us/windows-server-docs/get-started/getting-started-with-server-core

Discovery

I wrote a PowerShell script that exported the list of Windows Server 2016 features from both Core and Desktop Experience. The script is attached to the blog entry should you be curious. It requires an online Desktop Experience and Core version, as well as the "WIM" for the install of each. I know there are more elegant ways to do this:

  • (Invoke-command for the Get-WindowsOptionalFeature) so all that is needed are the online installs.
  • All of this could be done with the Get-WindowsOptionalFeature, but that gave me a raw list with none of the parent/child relationships that Get-WindowsFeature provided so it was a little rough to understand.

However, this got the job done and was not worth a re-write.

Script:  Compare Windows Server 2016 Desktop Experience and Core.ps1

Results

Here is a table of the Windows Features missing from core (see full spreadsheet Features Missing from Windows Server 2016 Core, includes insight into subfeature for which there is partial support of the top level feature):

IsNotInCore DisplayName Name IsRSATSubFeature
TRUE Fax Server Fax

FALSE

TRUE MultiPoint Services MultiPointServerRole

FALSE

TRUE Network Policy and Access Services NPAS

FALSE

TRUE |-Distributed Scan Server Print-Scan-Server

FALSE

TRUE |-Internet Printing Print-Internet

FALSE

TRUE |-Remote Desktop Gateway RDS-Gateway

FALSE

TRUE |-Remote Desktop Session Host RDS-RD-Server

FALSE

TRUE |-Remote Desktop Web Access RDS-Web-Access

FALSE

TRUE |-|-IIS Management Console Web-Mgmt-Console

FALSE

TRUE |-|-|-IIS 6 Management Console Web-Lgcy-Mgmt-Console

FALSE

TRUE Windows Deployment Services WDS

FALSE

TRUE |-Deployment Server WDS-Deployment

FALSE

TRUE |-Transport Server WDS-Transport

FALSE

TRUE |-IIS Server Extension BITS-IIS-Ext

FALSE

TRUE BitLocker Network Unlock BitLocker-NetworkUnlock

FALSE

TRUE Direct Play Direct-Play

FALSE

TRUE Internet Printing Client Internet-Print-Client

FALSE

TRUE LPR Port Monitor LPR-Port-Monitor

FALSE

TRUE |-|-Multicasting Support MSMQ-Multicasting

FALSE

TRUE RAS Connection Manager Administration Kit (CMAK) CMAK

FALSE

TRUE Remote Assistance Remote-Assistance

FALSE

TRUE Simple TCP/IP Services Simple-TCPIP

FALSE

TRUE SMTP Server SMTP-Server

FALSE

TRUE TFTP Client TFTP-Client

FALSE

TRUE Windows Biometric Framework Biometric-Framework

FALSE

TRUE |-GUI for Windows Defender Windows-Defender-Gui

FALSE

TRUE Windows Identity Foundation 3.5 Windows-Identity-Foundation

FALSE

TRUE |-Windows PowerShell ISE PowerShell-ISE

FALSE

TRUE Windows Search Service Search-Service

FALSE

TRUE Windows TIFF IFilter Windows-TIFF-IFilter

FALSE

TRUE Wireless LAN Service Wireless-Networking

FALSE

TRUE XPS Viewer XPS-Viewer

FALSE

NOTE:  You will notice that there is a column about whether or not this is an RSAT SubFeature.  For functional purposes we do not care when upgrading whether or not someone has installed administration tools that are dependent on the GUI.  Since we don’t want admins logging on to the boxes to do administration.

Building on top of this information

I used this information in System Center Configuration Manager to create two collections, one of systems that can be upgraded to Core and one of systems that must be upgraded to Desktop Experience.

Here are the respective SCCM Collection Queries (note that there may be better/performing ways to write these):

  • Servers that can not be upgraded to core based on features installed
    select distinct SMS_R_SYSTEM.ResourceID,SMS_R_SYSTEM.ResourceType,SMS_R_SYSTEM.Name,SMS_R_SYSTEM.SMSUniqueIdentifier,SMS_R_SYSTEM.ResourceDomainORWorkgroup,SMS_R_SYSTEM.Client from SMS_R_System inner join SMS_G_System_SERVER_FEATURE on SMS_G_System_SERVER_FEATURE.ResourceID = SMS_R_System.ResourceId inner join SMS_G_System_SYSTEM on SMS_G_System_SYSTEM.ResourceID = SMS_R_System.ResourceId where SMS_G_System_SERVER_FEATURE.Name in ("Fax Server","MultiPoint Services","Network Policy and Access Services","Distributed Scan Server","Internet Printing","Remote Desktop Gateway","Remote Desktop Session Host","Remote Desktop Web Access","IIS Management Console","IIS 6 Management Console","Windows Deployment Services","Deployment Server","Transport Server","IIS Server Extension","BitLocker Network Unlock","Direct Play","Internet Printing Client","LPR Port Monitor","Multicasting Support","RAS Connection Manager Administration Kit (CMAK)","Remote Assistance","Simple TCP/IP Services","SMTP Server","TFTP Client","Windows Biometric Framework","GUI for Windows Defender","Windows Identity Foundation 3.5","Windows PowerShell ISE","Windows Search Service","Windows TIFF IFilter","Wireless LAN Service","XPS Viewer") and SMS_G_System_SYSTEM.SystemRole = "Server"
  • Servers that can be upgraded to core based on features installed (excluding RSAT features):
    select SMS_R_SYSTEM.ResourceID,SMS_R_SYSTEM.ResourceType,SMS_R_SYSTEM.Name,SMS_R_SYSTEM.SMSUniqueIdentifier,SMS_R_SYSTEM.ResourceDomainORWorkgroup,SMS_R_SYSTEM.Client from SMS_R_System inner join SMS_G_System_SYSTEM on SMS_G_System_SYSTEM.ResourceId = SMS_R_System.ResourceId where SMS_G_System_SYSTEM.SystemRole = "Server"  AND SMS_R_System.Name NOT IN (select distinct SMS_R_System.Name from  SMS_R_System inner join SMS_G_System_SERVER_FEATURE on SMS_G_System_SERVER_FEATURE.ResourceID = SMS_R_System.ResourceId inner join SMS_G_System_SYSTEM on SMS_G_System_SYSTEM.ResourceID = SMS_R_System.ResourceId where SMS_G_System_SERVER_FEATURE.Name in ("Fax Server","MultiPoint Services","Network Policy and Access Services","Distributed Scan Server","Internet Printing","Remote Desktop Gateway","Remote Desktop Session Host","Remote Desktop Web Access","IIS Management Console","IIS 6 Management Console","Windows Deployment Services","Deployment Server","Transport Server","IIS Server Extension","BitLocker Network Unlock","Direct Play","Internet Printing Client","LPR Port Monitor","Multicasting Support","RAS Connection Manager Administration Kit (CMAK)","Remote Assistance","Simple TCP/IP Services","SMTP Server","TFTP Client","Windows Biometric Framework","GUI for Windows Defender","Windows Identity Foundation 3.5","Windows PowerShell ISE","Windows Search Service","Windows TIFF IFilter","Wireless LAN Service","XPS Viewer") and SMS_G_System_SYSTEM.SystemRole = "Server")

 

(Update) PowerShell command string to determine which roles prevent a system from being core:

Get-WindowsFeature|Where-Object {$_.Installed -and ($_.DisplayName -EQ “Fax Server" -or $_.DisplayName -EQ "MultiPoint Services" -or $_.DisplayName -EQ "Network Policy and Access Services" -or $_.DisplayName -EQ "Distributed Scan Server" -or $_.DisplayName -EQ "Internet Printing" -or $_.DisplayName -EQ "Remote Desktop Gateway" -or $_.DisplayName -EQ "Remote Desktop Session Host" -or $_.DisplayName -EQ "Remote Desktop Web Access" -or $_.DisplayName -EQ "IIS Management Console" -or $_.DisplayName -EQ "IIS 6 Management Console" -or $_.DisplayName -EQ "Windows Deployment Services" -or $_.DisplayName -EQ "Deployment Server" -or $_.DisplayName -EQ "Transport Server" -or $_.DisplayName -EQ "IIS Server Extension" -or $_.DisplayName -EQ "BitLocker Network Unlock" -or $_.DisplayName -EQ "Direct Play" -or $_.DisplayName -EQ "Internet Printing Client" -or $_.DisplayName -EQ "LPR Port Monitor" -or $_.DisplayName -EQ "Multicasting Support" -or $_.DisplayName -EQ "Multicasting Support" -or $_.DisplayName -EQ "RAS Connection Manager Administration Kit (CMAK)" -or $_.DisplayName -EQ "Remote Assistance" -or $_.DisplayName -EQ "Simple TCP/IP Services" -or $_.DisplayName -EQ "SMTP Server" -or $_.DisplayName -EQ "TFTP Client" -or $_.DisplayName -EQ "Windows Biometric Framework" -or $_.DisplayName -EQ "GUI for Windows Defender" -or $_.DisplayName -EQ "Windows Identity Foundation 3.5" -or $_.DisplayName -EQ "Windows PowerShell ISE" -or $_.DisplayName -EQ "Windows Search Service" -or $_.DisplayName -EQ "Windows TIFF IFilter" -or $_.DisplayName -EQ "Wireless LAN Service" -or $_.DisplayName -EQ "XPS Viewer")}