Windows Server Core
With Windows Server 2008, Microsoft at last released a "real" server OS with installation type "Server Core" without unnecessary graphical features in the server OS to get a smaller footprint of system resources (less disk and memory) compared to a Full Installation.
There are absolutely no reason to install Full Installation mode of Windows Server 2008 if it isn't really necessary when the service/feature/role is supported on Server Core.
The only real argument for not installing Windows Server 2008 (R2) as Server Core is that the role/feature that shall be run on the server isn't supported and can't be run.
Server Core gives less maintenance and less resource requirements than Full Installation.
As there are less features installed on a Server Core box, it gives much less patching and higher uptime. With less features, there are less security holes making it a more secure server than a Full Installation.
Except of the initial network configuration and patch management, the most management can be done the same way on a Server Core box as on a Full Installation box.
Limitations
With the first release (R1) of Server Core there were some limitiations that has been improved in R2 release of Server Core. There are still limitations in R2 release causing some applications to not be able to be installed or run.
PowerShell depends on .NET framework, which wasn't included in original release, and could by that reason not be installed in a native way. A workaround for R1 is described in Dmitry Sotnikov's blog. In R2, powershell is installed as a native feature (ocsetup MicrosoftWindowsPowerShell).
Some roles/features like Terminal Services/Remote Desktop Services server roles are not supported on Server Core and can't be installed.
Applications depending on .NET Framework may fail to run due to the framework included in Server Core R2 is partial of the Full Installation (some parts of presentation layer is excluded).
Server Core has except of some basic tools like regedit, calculator and task manager no big GUI on the server and might propably scare some people when they only find a command prompt window when logging on the server and not able to point and click around in a regular Windows Explorer or start menu.
Installation
The same thing as for Full Installation: boot the server with the installation media and go through the installation wizard and select the correct installation mode and disk partition configuration and wait for the OS installation to complete.
System partition is enough to be 10GB compared with the recommendation of 40GB for Full Installation.
Basic command line help
Use cscript scregedit.wsf -cli located in %windir%\system32 to get a starting command line help.
Network configuration
netsh command works the same as in previous versions of Windows OS to configure IP-address, DNS server etc.
To simplify, this can in R2 release of Server Core now be done with builtin sconfig command.
In previous R1 release, the builtin method was to use netsh command line or download a third party tool like CoreConfig or Core Configuration Console.
In sconfig: use menu option 8 (Network Settings)
netsh: set IP-address
To set a single address:
Use DHCP assigned address: netsh int ip set address name="Local Area Connection" source=dhcp
Use a static IP address: netsh int ip set address "Local Area connection" static 10.0.0.9 255.0.0.0 10.0.0.1 1
To add additional adresses:
netsh int ip add address "Local Area Connection" 10.0.0.2 255.0.0.0
netsh int ip add address "Local Area Connection" gateway=10.0.0.3 gwmetric=2
netsh: set DNS-server
To set a single address:
netsh int ip set dns name="Local Area Connection" source=dhcp
netsh int ip set dns "Local Area Connection" static 10.0.0.1 primary
To add additinal addresses:
netsh int ip add dns "Local Area Connection" 10.0.0.1
netsh int ip add dns "Local Area Connection" 10.0.0.3
netsh: set WINS-server
Set a single address:
netsh int ip set wins name="Local Area Connection" source=dhcp
netsh int ip set wins "Local Area Connection" static 10.0.0.1 primary
Add additinal addresses:
netsh int ip add dns "Local Area Connection" 10.0.0.1
netsh int ip add dns "Local Area Connection" 10.0.0.3
Computer name
The server gets by default a random servername.
To rename the server, use option 2 (Computer Name) in sconfig or use command line netdom renamecomputer %computername% /newname:NEWCOMPUTERNAME.
Domain membership
To join the server to a domain, use option 1 (Domain/Workgorup) in sconfig or use command line netdom join %computername% /domain:DOMAINNAME /ud:USERNAME /pd:PASSWORD.
Remote management
Remote Desktop
RDP client can be used to connect to the server, but will only give the same command prompt interface as logging on to the console. To enable RDP support, use option 7 (Remote Desktop) in sconfig or cscript scregedit.wsf /AR 0 command.
mstsc.exe command is by default missing locally on a Server Core box, but can be made available by copying a couple of files from a Full Installation as described in Jason Huitt's blog
MMC and Server Manager
As a Server Core box lacks of GUI, there are no MMC or Server Manager available locally.
Instead, they nead to be run from a remote client.
To enable remote management, use option 4 (Configure Remote Management) in sconfig
Scripting
Powershell scripts can be run remotely.
Command Line Interface (CLI) tools
CLI tools can be run locally, and most of them also remotely when using parameter for specifying the server name.
Installing roles and features
To install new roles or features, use ocsetup RoleToBeInstalled command.
Use oclist command to display available roles/features and their installation status.
Installing a Active Directory role to setup the server as a Domain Controller is done by using dcpromo command with an answer file.
Service management
Use service manager MMC to connect from a remote client.
An alternate is to use sc command, which can be used either locally on the server or remotely.
To use sc command remotely, insert \\servername as first parameter for the command, otherwise skip it to handle the local computer.
Query information
List status for all services:
sc query
Query status for a specific service:
sc query servicename
The query option will only return basic information about the service without configuration options. To get the configuration part including startup type and dependencies:
sc qc servicename
Powershell
List all services:
get-service
get-service -computername RemoteComputerName
Get status for a specific service:
get-service -name ServiceName
get-service -name ServiceName -computername RemoteComputerName
Starting and stopping services from the command line
Starting and stopping services can locally be done by using net start servicename and net stop servicename. Skip the specific service name parameter for net start to list all running services.
A limitation of the net command is that it only handles the local machine. The remote option is however included in the sc command or by using powershell.
sc \\servername start ServiceName
sc \\servername stop servicename
Powershell
start-service -name servicename
start-service -name servicename -computername RemoteComputerName
stop-service -name servicename
restart-service -name servicename
Configuring services
Note that parameters for configuring services nead to have a space after '='-character.
Disable a service: sc config servicename start= disabled
Configure a service to start automatically: sc config servicename start= auto
Powershell
set-service -name servicename -startuptype automatic
set-service -name servicename -startuptype disabled
set-service -name servicename -startuptype manual -computername RemoteComputerName
Resources
nullsession.com
servercore.net
Windows Command Line