Windows Server 8 Beta - Installing the first DC in a Forest on Server Core

Reminder: this post is based around a beta version of a product and obviously subject to changes before RTM.

The release of Windows Server 8 Beta coincided with the need to build out a new homelab environment. I decided it would be a good opportunity to see how far I could use the Server Core deployment option (which is now the preferred choice in the install) and what issues I would come up against. I have thought for a long time that requring all the GUI components on a Windows Server, that typically didn’t need them, made it feel unnecessarily bloated. Server Core has obviously been available since Windows Server 2008, but with the release of Windows Server 8 adding more possibilites to Server Core and the statement that Windows Server 8 Apps must run without a GUI I figured it was time to get more familiar with it.

My other aim with this post was to carry out all configuration with PowerShell and not use any of the previous native commands such as netsh or dcpromo. Windows Server 8 ships with PowerShell modules for Network Configuration (new), Windows Server Role and Feature Install and Active Directory Domain Controller installation (new) which means this should be possible.

Note that in the PowerShell examples below, not all of the cmdlets are from the core PowerShell modules available. Prior to PowerShell v3 it was necessary to track down which module a cmdlet belonged to and then run:


Import-Module ModuleName

followed by the cmdlet. In PowerShell v3 simply running a non-core cmdlet, such as Get-NetIPAddress, will auto-import the module. Cool.

The first step was to deploy a Windows Server 8 Beta VM selecting the Server Core install option. (I’m not intending to detail that process here). Slightly disappointingly we are presented with cmd.exe and not a nice blue PowerShell console ;-) . I suspect this is because of the possibility to remove .Net and PowerShell from Server Core, so then you would have to deal with issues of multiple consoles to display.

So to get properly started let’s fire up PowerShell

Let’s take a look at the current IP configuration:


Get-NetIPaddress -InterfaceAlias \*Wired\* -AddressFamily IPv4

So we need to disable DHCP:


Get-NetIPInterface -InterfaceAlias \*Wired\* -AddressFamily IPv4 | Where {$\_.ConnectionSate -eq 'Connected'} | Set-NetIPInterface -Dhcp Disabled

Get-NetIPInterface -InterfaceAlias \*Wired\* -AddressFamily IPv4

Now configure a static IP, subnet and default gateway:


Get-NetIPAddress -InterfaceAlias "Wired Ethernet Connection" -AddressFamily IPv4 | New-NetIPAddress -IPv4Address 192.168.0.150 -PrefixLength 24 -DefaultGateway 192.168.0.1

Configuring DNS client settings uses a different cmdlet, Set-DNSClientServerAddress:


Set-DNSClientServerAddress -InterfaceAlias "Wired Ethernet Connection" -ServerAddresses 192.168.0.150,194.168.4.100

Get-DNSClientServerAddress -InterfaceAlias "Wired Ethernet Connection"

We should also set the DNS suffix with the Set-DnsClient cmdlet:


Set-DnsClient -InterfaceAlias "Wired Ethernet Connection" -ConnectionSpecificSuffix sunnydale.local

Get-DnsClient -InterfaceAlias "Wired Ethernet Connection"

Don’t forget to rename the computer if you have deployed the VM from a fresh install and have not already named it correctly via a VM template deployment process. (I did the first time and so ended up with a horribly named Domain Controller!)


Rename-Computer -NewName DC01

Restart-Computer

Active Directory is not installed by default:


Get-WindowsFeature \*Domain\*

So, let’s install the AD-Domain-Services role:


Install-WindowsFeature AD-Domain-Services

Get-WindowsFeature \*Domain\*

In previous releases at this point we would run dcpromo.exe and an unattend file, but now can use the Install-ADDSForest cmdlet instead.


Install-ADDSForest \`

\-ForestMode "Win8" \`

\-DomainMode "Win8" \`

\-DomainName "sunnydale.local" \`

\-DomainNetBIOSName "SUNNYDALE" \`

\-DatabasePath "C:\\Windows\\NTDS" \`

\-LogPath "C:\\Windows\\NTDS" \`

\-SYSVOLPath "C:\\Windows\\SYSVOL" \`

\-InstallDNS:$true \`

\-CreateDNSDelegation:$false \`

\-RebootOnCompletion:$true \`

\-Force:$true

You’ll be prompted for the Safe Mode Admin password (alternatively you could also specify it above)

The install will now begin:

Since we set:


\-RebootOnCompletion:$true

the server will restart once the install has completed.

Looking promising as it boots back up:

I was prompted to change the Administrator password, which I think is different from previous releases:

We can confirm that Active Directory is looking good by using some cmdlets from the AD PowerShell module. List users:


Get-ADUser -Filter \* | Format-Table Name,DistinguishedName -Auto

Retrieve some details about the Forest:


Get-ADForest

Retrieve some details about the Domain:


Get-ADDomain

and finally check out the Domain Controllers in the Domain:


Get-ADDomainController

I was pretty happy with this experience and had anticipated more issues getting this working for the first server in the domain, without being able to remote manage it from a workstation. So it will be on from here to try other infrastructure roles and applications in Server Core.

This was obviously my first attempt with Server Core in Windows Server 8, I’d be interested in any feedback on smarter ways of getting to this point. Oh and if you unnecessarily install a GUI on Windows Server 8, then I may have to despatch @ServerCoreMan to sort you out ;-)