You are here:   Research
  |  Login

Welcome to my blog, quickest way to find articles is usually to search for them.

Search in All Title Contents

Improving the ConfigMgr Inplace-Upgrade Task Sequence

May 26 2016

As you probably know, ConfigMgr Current Branch has a built-in task sequence template for Windows 10 Inplace-Upgrades. This template is used for Windows 7/8/8.1 to Windows 10 upgrades, as well as for Windows 10 to Windows 10 upgrades (when a new feature update is available).

However, the default task sequence template for Inplace-upgrades are missing some useful features. This post shows you how to add them.

Update July 13, 2017: Added in better logic for driver packages and uploaded an exported ready-made task sequence.

Download the task sequence:


Adding Setup Upgrade Assessment and Driver support

The features I recommend adding to the Inplace-Upgrade task sequence is a setup upgrade assessment action, as well as adding support for injecting drivers.

1. Edit your Inplace-Upgrade task sequence, add an extra Upgrade Operating System action, configured it to continue on error, and rename it to Upgrade Assessment.

Adding the upgrade assessment action.


The compatibility scan will always spit out a non-zero return code, for example 0xC1900210 which is the no issues found return code. The return code is set in a new read-only task sequence variable, the _SMSTSOSUpgradeActionReturnCode variable, and the reason for having a variable that, is so you can use it further down the line in the task sequence. The important thing is that even though Windows setup spits back a hexadecimal value, ConfigMgr reads it as a decimal value, so you need to do some conversion. For example 0xC1900210 in hex is 3247440400 in decimal.

2. Modify the Upgrade the Operating System group to use a task sequence variable as condition: Add _SMSTSOSUpgradeActionReturnCode, and set the value to 3247440400.

Configuring the Upgrade the Operating System group with a condition.


Next up is adding driver support, and in this example I had a Windows 10 driver packages for Dell Latitude E7270 and HP EliteBook 8560w.

3. In the Upgrade the Operating System group, add a new group named Drivers, and then use the Download Package Content action to download the driver packages. Also set a condition to only download the package if you’re deploying to that model.

4. Configure each Download Package Content action to save the path as a variable, in my case I used a custom path of %_SMSTSMDataPath%\Drivers. By using this path, ConfigMgr automatically cleans out the drivers folder when deployment is completed. (Thanks @WillKo2513 for the tip).


Adding Download Package Content actions with driver packages.


5. Then also add in condition on each Download Package Content action, to make sure it only downloads the package if you have that hardware model. Simply add a WMI Query filter for the model, for example: SELECT * FROM Win32_ComputerSystem WHERE Model LIKE '%Latitude E7270%'

Note:  Since the upgrade task sequences in ConfigMgr are not integrated with MDT by default, you can’t just use a task sequence variable like Model equals Latitude E7270. That’s why you use a WMI Query in the preceding step.


Adding conditions for the driver packages using old school WMI since we don’t have added the MDT actions in this task sequence.


6. Now, the Upgrade Operating System action does have an option (check box) to install drivers that you added, but don’t use it. It will fail if there are no drivers available, and there will be models for when you don’t need drivers. Instead you will add instructions in the next stop for the setup to add drivers, but only if there are any drivers needed.

Note: You can also add multiple Upgrade Operating System action with different conditions on them, one when there are drivers available, and one when they are no drivers. But I prefer to have a single one, so skip to the next step.


Skipping the drivers configuration on the Upgrade Operating System action.


7. After the last driver package, add a Set Task Sequence Variable action with the following settings:

Name: Instruct setup to install drivers if available
Description: The driver option on the Upgrade Operating System action fails if folder doesn't exist, using this as a workaround
Task Sequence Variable: OSDUpgradeStagedContent
Value: %_SMSTSMDataPath%\Drivers

Condition: %_SMSTSMDataPath%\Drivers exists

Note: In this task sequence you’re using the undocumented OSDUpgradeStagedContent variable, since that’s the variable the Upgrade Operating System action is using by default. Technically you can also use the OSDSetupAdditionalUpgradeOptions variable, and add the /installdrivers %_SMSTSMDataPath%\Drivers value, but the OSDSetupAdditionalUpgradeOptions is primarily intended for the /reflectdrivers option and for language packs. The use of the OSDUpgradeStagedContent varible simply makes it easier to handle different combinations of features that you need to apply, like one machine needing drivers and language pack, another just the language pack, and a third only the drivers.


Instruct setup to use drivers, if they exist.


Setting the condition.



All done…

Written by Johan Arwidmark

Deployment News

Happy deployment, and thanks for reading!

What our lawyers makes us say:

This information is provided "AS IS" with no warranties, confers no rights and is not supported by the authors or Deployment Artist.

Copyright © 2017 by Deployment Artist (the company behind deployment research). All rights reserved. No part of the information on this web site may be reproduced or posted in any form or by any means without the prior written permission of the publisher.

Shorthand: Don't pass off our work as yours, it's not nice.

Blog Archive