In Place Upgrade Windows 2016 to Windows 2019

KB ID 0001761


For the last twenty years or so I’ve said “In place upgrades are a bad idea“, my rationale has been that if something is broken we are simply migrating that problem, and we are relying on a lot of factors, (some of which may be unknown.) That we will just have to ‘trust that it will work‘. Most modern servers are virtual so we can snapshot them, or clone them and test the upgrade procedure but still it’s something I steer people away from.

A couple of weeks ago I had a client get in touch, he had a few Windows 2016 servers running in one of our data centres, he was experiencing the INCREDIBLY ANNOYING WINDOWS 2016 TAKES FOREVER TO INSTALL UPDATES PROBLEM. I suffer from this with my own test bench servers, so I sympathise. For me it’s not a problem, but when production servers are taking 12 hours plus to reboot, that’s a business continuity problem.

He wanted to do an ‘In place upgrade’ of the servers himself, but (Quite correctly) our service department had red flagged that, as we manage the servers for them, and theres a large chance that things might break horribly, and we should not be held accountable if that happens. With a few caveats (like checking backups before proceeding, cloning the servers first, updating the clones, and retaining the old servers until we knew the process had succeeded etc). Coupled with the fact that in the event of a catastrophic loss service, the client knew their application better than we did, I agreed that this would be fine.

But it got me thinking, how difficult is it to do an ‘In place upgrade’ these days? I mean Server 2019 is just Server 2016 in a pretty dress right?

In Place Upgrade

WARNING: I can afford to be a little cavalier with my test servers. If you need to do this in production check your hardware, Hypervisor support, and ALL the installed applications support the version of Windows you are upgrading to. Then backup and snapshot first!

To test the theory, I created a ‘Perfect Storm’ of things that might break, I’ve got an Exchange 2016 server that’s also a Domain Controller (test machine!) So I cloned that.

in place upgrade Windows 2016 to 2019

Present the ISO, (or pop the DVD in) and follow the instructions, when prompted type in the new Windows unlock code.

upgrade Windows 2016 to 2019

Domain Controller In Place Upgrade Warning

Problem:¬†This one is pretty much self explanatory, and makes complete sense if you’ve spent any time deploying domains controllers!

Active Directory on this domain controller does not contain Windows Server 2019 ADPREP / FORESTPREP updates

contain windows server 2019 adprep

Well of course it doesn’t! Think about it if this is the first 2019 domain controller in the domain, the the schema has not been updated for 2019 domain controllers, which would happen if you are installing a DC from scratch. Here there’s only one server in the domain, and I’m on it. DON’T CLOSE THE UPGRADE WINDOW.

Open a administrative command window and change to the D:\Sources\Adprep directory, run adprep.exe /forestprep and when prompted press C {Enter} to continue.

Upgrade to Windows 2019 adprep domain controller

Then run adprep.exe /domainprep you can then close the command window.

Upgrade to Windows 2019 domainprep domain controller

Swap back to the upgrade window, and continue the upgrade process. The server will reboot and upgrade, go get a coffee. When you return you will be looking at Windows Server 2019.

Upgraded to Windows 2019

Whats the chances Exchange survived? Well surprisingly;

In place upgrade Exchange to Windows 2019

If you give this a test and come across any problems, error messages, or anomalies. Please post them below.

Related Articles, References, Credits, or External Links


Author: PeteLong

Share This Post On


  1. as you know exchange 2016 doesn’t support server 2019. there have been known errors when running the 2016 install on server 2019.

    all that being said, i’m curious if you have been able to run CU upgrades to exchange once on server 2019..

    if so, while unsupported by MSFT this may be an interesting ‘loophole’ into getting exchange working on server 2019.

    Post a Reply
    • I’ve not done this, but I’ll throw it open for comment….

      Post a Reply

Submit a Comment

Your email address will not be published. Required fields are marked *