# encoding: ascii
# api: powershell
# title: Change Server 2012 type
# description: With the ablity to change between core, minimal, and GUI as the interface with Windows Server 2012, I put this together to make it easy to switch between the different types. It will install or uninstall the necessary features to get to state that you supply the script.
# version: 0.1
# type: script
# author: Na_pope
# license: CC0
# x-poshcode-id: 3804
# x-archived: 2013-01-10T07:16:19
# x-published: 2013-11-29T15:27:00
#
# Convert-Win2012ServerType -Type Core
#
<#
.SYNOPSIS
Use this script to change Windows Server 2012 to 1 of 4 types. The script installs or uninstalls
windows features to get to the desired type. The 4 types are:
Core - just a commandline
Minimal - commandline with added binaries to run some MMCs and Server Manager
Full GUI - standard desktop look with all GUI tools
RemoteDesktop - Add the desktop experience pack to be used in a Remote Desktop farm setting.
.DESCRIPTION
Convert-Win2012ServerType -Type (Core, Min, Gui, RemoteDesktop)
.PARAMETER Type
Choose one of the following - Core, Min, Gui, RemoteDesktop
.Notes
* Author - Nate Pope
* Date - 11/28/2012
* Version - .3
.EXAMPLE
To convert to a core install:
Convert-Win2012ServerType -Type Core
Convert to a GUI install:
Convert-Win2012ServerType -Type GUI
#>
param(
[Parameter(Mandatory=$true)]
[String[]]$Type
)
Function InstallMask {
$InstallMask = 0
if ((get-windowsfeature server-gui-mgmt-infra).installed) {
$InstallMask += 1
}
if ((get-windowsfeature server-gui-Shell).installed) {
$InstallMask += 2
}
if ((get-windowsfeature Desktop-Experience).installed) {
$InstallMask += 4
}
return $InstallMask
}
Function Covert2Core($mask) {
if ($mask -eq 0){
Write-Verbose "Already Core"
return
}
$inst = uninstall-windowsFeature -Name Desktop-Experience, server-gui-Shell, server-gui-mgmt-infra
return $inst.RestartNeeded
}
Function Covert2Min($mask) {
if ($mask -eq 1){
Write-Verbose "Already Min"
return
}else {
uninstall-windowsFeature -name server-gui-shell, desktop-Experience
}
$inst = install-windowsFeature server-gui-mgmt-infra
return $inst.RestartNeeded
}
Function Covert2Gui($mask) {
if ($mask -eq 3){
Write-Verbose "Already Full Gui"
return
}elseif ($mask -gt 4 ) {
uninstall-windowsFeature -name Desktop-Experience
}
$inst = install-windowsFeature -Name server-gui-Shell, server-gui-mgmt-infra
return $inst.RestartNeeded
}
Function Covert2RD($mask) {
if ($mask -eq 7){
Write-Verbose "Already Remote Desktop "
return
}
$inst = install-windowsFeature -Name Desktop-Experience, server-gui-Shell, server-gui-mgmt-infra
return $inst.RestartNeeded
}
###########################################################################################################
$mask = InstallMask
switch ($Type) {
Core {
$reboot = Covert2Core($mask)
break
}
Min {
$reboot = Covert2Min($mask)
break
}
Gui {
$reboot = Covert2Gui($mask)
break
}
RemoteDesktop {
$reboot = Covert2RD($mask)
break
}
default {
Write-Warning "The TYPE parameter must be specified (Core, Min, Gui, or RemoteDesktop)"
break
}
}
if ($reboot) { Restart-Computer }