Categories: Windows ServerTags: 25 years of Active Directory, 32KB Page Size, Active Directory, Domain Functional Level, Forest Functional Level, Windows Server 2025Finalizing the Active Directory Migration – Raising Functional Levels to 2025 In this concluding part of our zero-downtime Active Directory migration series, we will raise the Domain and Forest Functional Levels to Windows Server 2025. After migrating from Windows Server 2016 domain controllers (DCs) to new 2025 DCs in previous steps, this final phase unlocks […](Read more...)
Finalizing the Active Directory Migration – Raising Functional Levels to 2025
In this concluding part of our zero-downtime Active Directory migration series, we will raise the Domain and Forest Functional Levels to Windows Server 2025. After migrating from Windows Server 2016 domain controllers (DCs) to new 2025 DCs in previous steps, this final phase unlocks the latest Active Directory features. We’ll cover why functional levels matter, what’s new in 2025, prerequisites, the step-by-step process (via GUI and PowerShell), post-upgrade tasks (like enabling the 32KB database page feature), best practices for validation and monitoring, and some real-world insights on reliability and long-term support.

Why Raise Active Directory Functional Levels?
Active Directory Functional Levels determine the advanced features available in your domain or forest. When all your DCs run a newer Windows Server version, you can raise the functional level to enable those new capabilities. Moving to Windows Server 2025 functional levels will allow us to take advantage of improvements that aren’t accessible at the 2016 level. In summary, raising the domain and forest functional levels will:
Remember that raising functional levels is one-way and irreversible (short of a complete AD restore). It’s a planned milestone that solidifies your upgrade, so we only do it when we’re confident all prerequisites are met.
New Active Directory Features in Windows Server 2025
Windows Server 2025 introduces several Active Directory Domain Services enhancements. We ensure our environment can use these new features by raising the functional levels. Some highlights include:
Moving to the Windows Server 2025 functional level positions your Active Directory for the latest functionality, better performance, and the highest security baseline available in on-prem AD DS. Next, we’ll verify that we meet the requirements to raise the levels safely.
Prerequisites Before Raising Functional Levels
Before we proceed, double-check that the following prerequisites are satisfied. Skipping these could prevent a successful raise or even cause AD issues:
Get-ADDomainController -Filter * | Select-Object Name, OperatingSystem, IPv4Address #The output should show only Windows Server 2025 as the operating system. If an older OS appears, that DC must be upgraded or removed before proceeding.
Get-ADForest | Select-Object ForestMode, Domains Get-ADDomain | Select-Object DomainMode #This will list the forest functional and domain modes for your domain. Verify that they show Windows2016Forest / Windows2016Domain. If not, adjust accordingly before attempting 2025.
Get-ADForest | Select-Object SchemaMaster, DomainNamingMaster Get-ADDomain | Select-Object PDCEmulator, RIDMaster, InfrastructureMaster If any role still shows an old server name, transfer it to a 2025 DC before raising functional levels. (The functional level raise operation will implicitly target the Schema Master and other FSMOs, so they must be on compatible servers.)
Finally, inform any stakeholders of this planned change. Although end-users typically will not notice a functional level raise, it is a significant configuration change. If any legacy applications or systems interact with AD in unusual ways (especially older LDAP clients or domain trusts with old domains), let teams know and plan to verify those systems after the update.
Step-by-Step: Raising Domain and Forest Functional Levels to 2025
With the prerequisites met, let’s walk through raising the functional levels. We’ll first describe the graphical method using Active Directory Domains and Trusts, followed by the PowerShell method. You can use whichever you prefer – the result is the same. (If you have multiple domains in your forest, you would raise each domain’s level, then the forest level. In a single-domain forest, raising the forest will also automatically lift the domain to that level.)
Using the Active Directory Domains and Trusts Console (GUI)
Note: If any option is grayed out or missing (for example, you don’t see Windows Server 2025 as an available level), recheck that all your DCs are indeed running 2025 and that your account has the proper permissions. The GUI will only offer levels that are supported given the current state.
Using PowerShell to Raise Functional Levels
PowerShell provides a quick, scriptable way to raise the functional levels. This is especially useful if you prefer not to use the GUI or have many domains to update. Ensure you run on a machine with the Active Directory Module for PowerShell (like a DC or a management server with RSAT).
Get-ADDomain <your domain> | Select-Object Name, DomainMode Get-ADForest | Select-Object ForestMode #For example, Get-ADDomain contoso.com | Select DomainMode might return Windows2016Domain. This step just confirms what we expect.
Set-ADDomainMode -Identity "yourdomain.com" -DomainMode Windows2025Domain #Replace "yourdomain.com" with your domain’s DNS name. The -DomainMode parameter accepts the target level; in this case, Windows2025Domain is the value for Windows Server 2025. PowerShell will #prompt for confirmation. Type <strong>Y</strong> (Yes) to proceed. #The cmdlet will contact the domain naming master and perform the update. If successful, it will return without error. (If you get an error, read it closely: it might tell you a DC of an older #version was detected or that your credentials are insufficient.)
Set-ADForestMode -Identity "yourdomain.com" -ForestMode Windows2025Forest #Use your forest root domain name in -Identity (for a single-domain forest, it’s the same as the domain). Use Windows2025Forest as the new ForestMode value. Confirm with <strong>Y</strong> #when prompted. This updates the forest configuration. In a multi-domain forest, this will only succeed if all domains are already at the 2025 level (or at least have no lower OS DCs). If not, #it will warn you.
Get-ADDomain "yourdomain.com" | Select-Object Name, DomainMode Get-ADForest "yourdomain.com" | Select-Object ForestMode #The DomainMode and ForestMode should now report Windows2025Domain and Windows2025Forest, respectively. You can also verify via GUI or by running netdom query /domain:yourdomain FSMO to ensure #nothing looks awry (netdom doesn’t show functional level, but it’s a quick sanity check to see if DCs are still responding). #The PowerShell method is efficient, especially if you integrate it into a script for consistency across environments. Just be sure to handle the confirmation prompts (you can add -#Confirm:$false to bypass the prompt if running in an automated script, but only do that when you’re sure).
Immediate Post-Change Checks
Raising the functional levels typically does not cause any disruption. However, it’s wise to perform a few checks right after:
At this point, your domain and forest are officially running at the functional level of Windows Server 2025. You have unlocked the new AD DS feature set. Now that the upgrade is complete, we’ll discuss some optional configurations and best practices.
Enabling the 32KB AD Database Page Feature (Optional)
One of the most significant new features requiring the 2025 functional level is the 32KB page size for the Active Directory database. By default, even on Windows Server 2025 DCs, your AD database (NTDS.dit) still operates in an 8KB-page compatibility mode (since we upgraded from earlier versions). Now that all DCs are running 2025 and the functional level is raised, you can enable the 32K pages feature to gain the scalability benefits.
Important: Enabling 32K pages is a one-way operation. Once the forest is converted to 32KB pages, you cannot revert to 8KB pages without a complete AD forest recovery from backup. All DCs must support it (which ours do since they are 2025). Also, any backups taken before enabling 32K pages will be unusable after the switch (you would need to take fresh backups). Therefore, consider this carefully and ensure a solid backup is taken just before this step.
If you decide to proceed (perhaps after hours), here’s how to enable the 32K page feature via PowerShell:
Enable-ADOptionalFeature -Identity "Database 32k pages feature" ` -Scope ForestOrConfigurationSet ` -Target "yourforestname" ` -Server "YourDC.yourdomain.com" #In this command: #Identity "Database 32k pages feature" specifies the exact name of the optional feature to enable. #Scope ForestOrConfigurationSet indicates this is a forest-wide feature. #Target "yourforestname" should be your forest root domain (e.g., "contoso.com"). #Server "YourDC.yourdomain.com" is a domain controller to target for performing the change (you can use the one you’re on).
For most environments, enabling 32K pages is beneficial if you hit certain AD limits (like huge groups or users with many group memberships). If your AD is relatively standard in size, you may enable it to be future-proof. Just remember the backup considerations.
If you don’t need it immediately, you can choose to hold off. Leaving the functional level at 2025 without 32K pages enabled is perfectly fine and still supported. You can always enable it later, as long as all DCs remain on 2025+.
Other Post-Migration Considerations
With the functional level raised and optional features considered, here are a few additional tasks and best practices to wrap up the migration project:
Enable-ADOptionalFeature -Identity "Recycle Bin Feature" -Scope ForestOrConfigurationSet -Target "yourforestname"
This is a one-time forest-wide setting. Like 32K pages, it’s irreversible (you can’t disable the Recycle Bin once it’s on), but there’s almost no downside—only upside in recovering deleted objects. If your organization hasn’t turned it on, consider doing so now for the added safety net.
Real-World Insights and Conclusion
It is a significant achievement to perform a zero-downtime Active Directory migration from Windows Server 2016 to Windows Server 2025 and raise functional levels. In real-world terms, we upgraded critical infrastructure without interrupting business operations—end-users likely never realized anything changed (exactly what we want: authentication and directory lookups continued seamlessly).
Reliability: By introducing new 2025 DCs in parallel, transferring roles gracefully, and slowly phasing out the old 2016 DCs, we minimized risk at each step. Each part of this series addressed a chunk of the process, allowing verification and confidence before moving on. This staged approach is much more reliable than an in-place upgrade or a big-bang migration. Now, with functional levels at 2025, the environment is running in a fully updated mode. This should translate to fewer issues in the long term, as we’ve eliminated legacy components and potential points of failure (for example, older replication services or outdated cryptography support).
Long-Term Support: Windows Server 2025 being an LTSC release means it will receive updates and support for years. Your Active Directory is “future-proofed” for the near future, and you have the latest features. Microsoft typically introduces a new AD functional level only when there are meaningful improvements (the last one was 2016, so it’s been a while). Being at 2025 means you’re on the cutting edge of on-premises AD capabilities. It also means you won’t need to do another AD upgrade project for a long time – likely until the next major Windows Server LTSC (and even then, you can introduce newer DCs alongside again).
Next Steps: After such a migration, the focus usually shifts to operational maintenance and leveraging new features:
Finally, take a moment to celebrate! Migrating the Active Directory is no small feat. Following best practices and performing each step methodically (as we did through parts 1–10) ensures that your organization’s directory infrastructure is on a solid, modern foundation. This sets the stage for many years of stable identity management and the ability to integrate with the latest technologies.
Remember that a healthy AD environment requires ongoing care – regular backups, monitoring, and periodic updates – but now you can manage that confidently. We hope this series helped accomplish the migration and provided insight into Active Directory’s inner workings and how to approach changes with minimal risk.
Thank you for following along on this migration journey. With your Active Directory on Windows Server 2025 and functional levels raised, you’ve updated your core infrastructure. Great job on reaching the finish line!
PowerShell Command Summary for the Migration Series
Below is a summary of key PowerShell commands used throughout this 10-part Active Directory migration series. These commands cover various stages from preparation and installation of new DCs, through role transfers and checks, up to the final functional level raise and optional features. Use this table as a quick reference for similar projects:
| Task / Purpose | PowerShell Command (with example placeholders) |
|---|---|
| Verify current Domain Functional Level | Get-ADDomain “YourDomainName” | Select-Object DomainMode Shows the current domain functional level (e.g., Windows2016Domain). |
| Verify current Forest Functional Level | Get-ADForest “YourDomainName” | Select-Object ForestMode Shows the current forest functional level (e.g., Windows2016Forest). |
| List all Domain Controllers and OS | Get-ADDomainController -Filter * | Select Name, OperatingSystem, Site Lists each DC with its Windows version and site. |
| Install AD DS role on new server | Install-WindowsFeature AD-Domain-Services -IncludeManagementTools Installs the Active Directory Domain Services role (and management tools) on a new server prior to promotion. |
| Promote server to Domain Controller | Install-ADDSDomainController -DomainName “yourdomain.com” -Credential (Get-Credential) Promotes the server to a DC in the specified domain (runs domain join, AD DS configuration, etc.). Additional parameters like -InstallDns, -SiteName “Site1” can be added as needed. |
| Check FSMO role holders (Forest) | Get-ADForest | Select-Object SchemaMaster, DomainNamingMaster Displays which DC holds the Schema Master and Domain Naming Master roles. |
| Check FSMO role holders (Domain) | Get-ADDomain | Select-Object PDCEmulator, RIDMaster, InfrastructureMaster Displays which DC holds the PDC Emulator, RID, and Infrastructure Master roles. |
| Transfer FSMO roles to a new DC | Move-ADDirectoryServerOperationMasterRole -Identity “NewDC1” -OperationMasterRole PDCEmulator, RIDMaster, InfrastructureMaster, SchemaMaster, DomainNamingMaster This function transfers all FSMO roles to the specified DC (in this example, “NewDC1”). You can list specific roles or use commas to move multiples at once. |
| Verify Global Catalog status | Get-ADDomainController -Filter * | Select-Object Name, IsGlobalCatalog Checks which DCs are Global Catalogs. Use Set-ADDomainController -Identity “DCName” -IsGlobalCatalog:$true to enable GC on a DC if needed. |
| Demote an old Domain Controller | Uninstall-ADDSDomainController -LocalAdministratorPassword (ConvertTo-SecureString “YourNewLocalAdminP@ss” -AsPlainText -Force) -Credential (Get-Credential) -ForceRemoval -Confirm:$false Demotes a DC to a member server. The provided password will be set for the local Administrator after demotion. This assumes the DC is not the last in the domain; -ForceRemoval skips replication of remaining changes (since we assume healthy partners). Supply Domain Admin credentials when prompted by Get-Credential. |
| Metadata cleanup (if DC wasn’t demoted gracefully) | Remove-ADComputer “OldDCName” -Partition “CN=Configuration,DC=yourdomain,DC=com” -Recursive Removes lingering AD objects of a decommissioned DC from AD (only if needed). It’s safer to use GUI or ntdsutil for metadata cleanup; this command is a one-liner approach. |
| Check AD replication status | Get-ADReplicationPartnerMetadata -Target “DCName” -Scope Domain | Select Source, Destination, LastSyncResult Shows replication status for a given DC with its partners. Alternatively, use repadmin /replsummary (non-PowerShell) for a summary of all replication. |
| Trigger AD replication between partners | Sync-ADObject -Object “CN=TestUser,DC=yourdomain,DC=com” -Source “DC1” -Destination “DC2” Forces replication of a specific object from one DC to another. Useful for testing or speeding up critical changes. |
| Raise Domain Functional Level | Set-ADDomainMode -Identity “yourdomain.com” -DomainMode Windows2025Domain Raises the domain functional level to Windows Server 2025. |
| Raise Forest Functional Level | Set-ADForestMode -Identity “yourdomain.com” -ForestMode Windows2025Forest Raises the forest functional level to Windows Server 2025 (affects all domains in the forest). |
| Enable Active Directory Recycle Bin | Enable-ADOptionalFeature -Identity “Recycle Bin Feature” -Scope ForestOrConfigurationSet -Target “yourdomain.com” Enables the AD Recycle Bin for the forest, allowing object recovery from the “Deleted Objects” container. |
| Enable AD 32K Database Page Feature | Enable-ADOptionalFeature -Identity “Database 32k pages feature” -Scope ForestOrConfigurationSet -Target “yourdomain.com” -Server “YourDCName” This option enables the 32KB page size for the AD database across the forest. If needed, to initiate the change, use a specific DC with the -Server parameter. |
| Get AD Schema version | Get-ADObject (Get-ADRootDSE).schemaNamingContext -Property objectVersion Returns the AD schema version (e.g., 88 for 2016, 89-91 range for 2025 after updates). This can confirm if the schema was updated for 2025. |
| General Domain Controller health check | dcdiag /v (Not a PowerShell cmdlet, but often used in our process) Runs a comprehensive diagnostic on the domain controller’s health. Use this on each DC to ensure everything passes after changes. |
The table above references all commands shown through the 10 part series.
PS. A little known fact about Dave and myself is that we spend much of our career working as Microsoft contractors inside the Global Technology Readiness and SMSGR teams. This time, we worked with various teams, and we have been working with customers migrating to Active Directory for the past 25 years. We have seen every iteration of Active Directory, and it is encouraging to see Microsoft making all of the new investments in the on-prem tooling that 99% of customers still use. WTG Microsoft, we look forward to the next 10 years to see what comes of AD 2035.
Cristal Kawula, Checkyourlogs.net