So long MDT, Native CM* for Me

*With a few parts of MDT salvaged from the garbage heap.

UPDATE: 2024.5.21 – I’ve now replaced MDT Lite’s gather with a Johan’s script: Josch62/Gather-Script-For-ConfigMgr-TS (

Ok, MDT is still a good product if you’re using it to deploy an OS only. (And if you’re doing a build and capture, personally I still like it for that, and we could find several that would agree and disagree with using MDT for B&C, all with very valid points…anyway) It includes what you need to get your Bare Metal done.  You can even get pretty fancy when you implement the database features.  But that’s where MDT ends… and then your device management solution has to pickup, so why not have ConfigMgr do it all?  Well for a long time (and even now) MDT still has some features that CM hasn’t included, and while the CM team is continuing to close the gap, it’s been nice having a few of the MDT options available, so we’ve been integrating MDT with ConfigMgr, which is quite easy.

Quick Side bar, other things to remember if you integrate MDT… if you migrate servers, you need to make sure you setup and install MDT on that server before you migrate your objects, or you’ll have your TS fail to migrate.

If you integrate MDT into CM, you can then create a “MDT Task Sequence” which will walk you through building out several required packages: MDT Boot Image, MDT Package, USMT, Settings (custom settings & unattend.xml),

image image image image
Then when you’re done, with the wizard, you’re left with this very very long and somewhat overwhelming task sequence:
image image image

Yes, that’s right, it took 3 screen captures to get the entire DEFAULT MDT Task Sequence recorded.

The MDT TS has a lot of built in logic, for many scenarios, like BareMetal, Refresh, Capture, Data Backup & Restore, many of which are pretty handy, and I’ve learned a TON from looking in to each step, looking at the logic behind it, and looking at the associated scripts for the tasks.  The Default MDT Task Sequence is a good teacher in and of itself.

You also get some additional “MDT Only” Steps you can add:

Run PowerShell Script has been already added to “General”, and in one of the next releases becomes even more powerful in Native CM by being able to just paste the script contents into the step…
Validate is basically the same as “Check Readiness”, and you can use DISM or PowerShell to Add Roles.

But now, if you’re only doing BareMetal deployments, and you don’t care about user data backup*, you don’t need all of those extra steps cluttering up your TS.  Now for comparison, lets look at the default CM Task Sequence:
*You can still do all of those things, just set them up yourselves later.

Yep, that’s it.. all 13 steps of simplicity.  Now, when you need to find a step… you can!  Of course, your production TS will be much longer in the end, but at least you’re not starting with like a hundreds steps.

So, now you’re like… that’s all well and good, but now you’re missing some of the bonuses of using MDT, like that powerful MDT Gather Step, which gets you a boat load of cool variables. You’re right, so instead of installing MDT on your server and integrating it, lets just steal the parts we want and make or own “MDT Lite” packages. See THIS POST on how to create the MDT Lite Package.   Perhaps you’re not even using any of those variables in your current TS, and can swap out to a Native CM Task Sequence quite easily.

How I did it:
I created a Default OSD Task Sequence, as shown above, and started to copy over the groups and step that were needed.  I went from the Right TS to the Left TS, judging from the scrollbar alone, it’s like 1/3 as long.  I also took this time to do a little cleaning.

After I moved all of the important things over, I ran it.. I found a few groups didn’t run, when I checked on the conditions, I noticed I was using variables that no longer exist without MDT Gather Step.  I then added the MDT Lite Package and Gather Step, and all was well. However, you might see that the variable from MDT you are using isn’t there, but wait… it might be, but it might be called something different now, or you can create the variable yourself with a little powershell code, then you don’t need to use MDT Lite either! Update, as of 12/24, I was able to use a powershell script to get all of my required variables.

Now I can go back, uninstall MDT, delete the unused MDT Packages from CM, and keep my environment tidy.

More Info about Variables:

More Info about MDT Lite:

7 thoughts on “So long MDT, Native CM* for Me”

  1. Hello 🙂
    I noticed you have a step that sets the screen resolution on a virtual machine. How do you do that ? i found some sketchy software that i’m not so keen to use.

    Thanks in advance!


Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.