Promote a Windows VPS to a domain controller only when it is a fresh, dedicated server. The clean workflow is: rename the server, verify stable IP and DNS settings, install the Active Directory Domain Services role, run Install-ADDSForest for a new forest, set a strong DSRM password, reboot, then verify AD DS, DNS, Netlogon, SYSVOL, domain controller status, and basic directory operations.
Quick verdict
| Situation | Recommendation |
|---|---|
| New SMB lab domain | Promote a fresh Windows VPS as the first DC |
| Existing production domain | Add an additional DC only after DNS, time sync, connectivity, and replication checks |
| Server already running IIS, SQL Server, RDS, ERP, or file workloads | Do not promote it; use a dedicated VM |
| Single-DC lab | Acceptable for testing and demos |
| Production AD environment | Use at least two domain controllers |
| Public internet-facing VPS | Do not expose AD ports publicly; use private networking or VPN |
| Before promotion | Rename server, verify IP/DNS, confirm Administrator password requirements |
| After promotion | Verify services, DNS zones, SYSVOL, domain controller status, and backups |
A domain controller is not just another Windows role. It becomes the identity foundation for the environment.
What this guide covers
This guide demonstrates the first domain controller in a new forest path.
You will build this:
Fresh Windows Server VPS -> Hostname: DC01 -> AD DS role installed -> New forest created with Install-ADDSForest -> DNS installed during promotion -> Server rebooted as domain controller -> AD DS, DNS, Netlogon, SYSVOL, OU, and user verified
This guide does not fully cover production multi-DC replication topology, site design, RODC design, hybrid AD, or migration from an existing on-prem domain. Those require additional planning.
What we tested on Raff
We tested this walkthrough on a fresh Raff Windows VPS running Windows Server 2025 Datacenter Evaluation.

Test environment:
| Item | Value |
|---|---|
| Provider | Raff Technologies |
| OS | Windows Server 2025 Datacenter Evaluation |
| Server role | First domain controller in a new forest |
| Hostname | DC01 |
| Test domain | contoso.local |
| Forest NetBIOS name | CONTOSO |
| AD role | Active Directory Domain Services |
| DNS | Installed during promotion |
| Test date | 2026-06-09 |
| Tester | Serdar Tekin |
In this lab, we verified:
- server baseline
- hostname and IP/DNS pre-flight
- AD DS role installation
- local Administrator password requirement
Install-ADDSForestpromotion- AD DS services after reboot
- domain controller verification
- DNS zone creation
- first OU and user creation
This guide demonstrates a new forest / first domain controller deployment. Adding a domain controller to an existing forest has different prerequisites and should be tested separately.
Important: use a dedicated VM
Do not promote a general-purpose Windows server to a domain controller if it already runs production workloads such as:
- IIS
- SQL Server
- RDS Session Host
- ERP software
- accounting software
- public web apps
- file sharing for users
- business applications
- backup agents with broad access
- third-party tools you do not fully control
A domain controller should be treated as a dedicated identity server.
Mixing roles creates security and maintenance risk. If a web app, SQL app, RDS workload, or business application is compromised, the domain controller may also be exposed.
For production, use at least two domain controllers when possible.
Production topology before you start
For a lab, one domain controller is enough.
For production, one DC is a risk.
A practical production design is:
Private network |-- DC01 | |-- AD DS | |-- DNS | |-- Global Catalog | `-- FSMO roles | `-- DC02 |-- AD DS |-- DNS |-- Global Catalog `-- replication partner
If both DCs are in the same private network and location, keep the design simple with one AD site.
If one DC is in the cloud and another is in an office or another region, plan AD Sites, Subnets, and Site Links so clients find the right domain controller and replication follows the right path.
Domain naming note
The lab domain in this article uses:
contoso.local
That is fine for a controlled tutorial.
For production, choose your domain name carefully. Many teams use a subdomain of a domain they own, such as:
ad.example.com corp.example.com internal.example.com
Avoid single-label domain names such as:
contoso company localdomain
They create unnecessary DNS and compatibility problems.
What you'll need
Before starting, prepare:
- Fresh Raff Windows VPS or similar Windows Server VPS
- Windows Server 2022 or Windows Server 2025
- Local Administrator access
- Stable private IP configuration where possible
- Meaningful hostname, such as
DC01 - Strong local Administrator password
- Strong DSRM password
- Private networking or VPN for domain traffic
- 30-45 minutes including reboot
- A second DC plan if this will become production
For a small lab, a 4 vCPU / 8 GB Windows VPS is enough.
For production, size based on users, sites, replication design, DNS usage, monitoring, backups, redundancy, and the number of domain-joined systems.
Step 1 - Confirm the test environment
Start with a fresh Windows Server VM.
Run PowerShell as Administrator:
cls Get-ComputerInfo | Select-Object WindowsProductName, WindowsVersion, OsBuildNumber, CsNumberOfLogicalProcessors, CsTotalPhysicalMemory Get-Service | Where-Object {$_.Name -in 'LanmanServer','Dnscache'} | Select-Object Name, Status, DisplayName hostname
This records the baseline before AD DS promotion.
The important checks are:
| Check | Why it matters |
|---|---|
| Windows version | Confirms the server OS |
| CPU and memory | Documents VM size |
| Hostname | Should be renamed before promotion |
| Basic services | Confirms the server is responsive |
Do not promote a server until the hostname is correct.
Step 2 - Set hostname and verify IP/DNS
Rename the server before promotion.
Example:
Rename-Computer -NewName "DC01" -Restart
After reboot, reconnect by RDP and verify hostname and IP configuration.

Useful checks:
$adapter = (Get-NetAdapter | Where-Object Status -eq 'Up').Name hostname Get-NetIPAddress -InterfaceAlias $adapter -AddressFamily IPv4 | Select-Object InterfaceAlias, IPAddress, PrefixLength, AddressState Get-DnsClientServerAddress -InterfaceAlias $adapter -AddressFamily IPv4 Test-Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending'
For a private AD environment, the DC should use stable private IP addressing.
For a public VPS-only setup, be careful. Do not expose Active Directory services directly to the internet. Use private networking or VPN for domain traffic.
Step 3 - Install the AD DS role
Install Active Directory Domain Services and management tools:
Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools
Verify the role:
Get-WindowsFeature -Name AD-Domain-Services

The AD DS role install alone does not make the server a domain controller.
The promotion happens in the next step.
Step 4 - Make sure the local Administrator password is required
Before creating a new forest, the local Administrator account becomes the domain Administrator account.
If the local Administrator account does not require a password, promotion can fail.
Verify it:
net user Administrator
Look for:
Password required Yes

If needed, force the local Administrator account to require a password:
net user Administrator /passwordreq:yes
Then set a strong password:
net user Administrator "Replace-With-Your-Strong-Password"
For production, use a unique password stored in a password manager.
Step 5 - Promote to a new forest
For a brand-new AD environment, use Install-ADDSForest.
Example lab domain:
contoso.local
Run:
Install-ADDSForest ` -DomainName "contoso.local" ` -DomainNetbiosName "CONTOSO" ` -ForestMode "WinThreshold" ` -DomainMode "WinThreshold" ` -InstallDns ` -CreateDnsDelegation:$false ` -DatabasePath "C:\Windows\NTDS" ` -LogPath "C:\Windows\NTDS" ` -SysvolPath "C:\Windows\SYSVOL" ` -NoRebootOnCompletion:$false ` -Force
PowerShell will ask for:
SafeModeAdministratorPassword
This is the Directory Services Restore Mode, or DSRM, password.

Store the DSRM password securely. It is separate from normal domain login and is used for offline AD recovery.
After validation, the server installs the new forest, configures DNS, and reboots automatically.



