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