Monday, January 8, 2018

Windows 10 In-Place Upgrade Assessment Error Handling

As I progress to making Windows 10 available to end users I needed to polish out the error handling. While I am using the Upgrade Readiness tool that Microsoft provides to target successful systems, I am still performing one final check in the Task Sequence by having the Task Sequence do an assessment before continuing and capturing those results.

You just insert the Upgrade Operating System step and select the box 'Perform Windows Setup compatibility scan without starting upgrade' at minimum. I have also selected the other chekboxes below it such as 'Ignore any dismissible compatibility messages' checkbox. If unchecked, this will for example, trigger a failure for an incompatible driver that gets removed anyway. Useful if you have some weird driver for a microscope type device (I do!) but not useful if you accept the removal that the upgrade does. For those types of endpoints the Readiness tool has identified them.

I also enabled the last two check boxes. These will cause the eval step to pull the latest eval info from Microsoft instead of using what data shipped on the ISO. There may be some proxy concerns here.

Here is what that part of the Task Sequence looks like:

For initial roll out to IT, I am using Niall C. Brady's dialog Powershell Script so I wont cover that part here. I am working on a template script to pull HTML edited file to be more polished for an end user when I get to that point but Niall's script works great.

The 'Upgrade Assessment' step outputs to the read-only variable _SMSTSOSUpgradeActionReturnCode. SETUP.EXE actually outputs in hex whereas the variable is in decimal. Looking at Microsofts blog post these are the major exit codes. I converted the hex to decimal with a converter so I work in the same format ConfigMgr is.

  • No issues found:  0xC1900210 (3247440400)
  • Compatibility issues found (hard block):  0xC1900208 (3247440392)
  • Migration choice (auto upgrade) not available (probably the wrong SKU or architecture)· 0xC1900204 (3247440388)
  • Does not meet system requirements for Windows 10: 0xC1900200  (3247440384)
  • Insufficient free disk space: 0xC190020E (3247440398)

The 'Assessment Errors Detected' group has a condition of _SMSTSOSUpgradeActionReturnCode ≠ 3247440400 whereas the 'Upgrade the Operating System' group has _SMSTSOSUpgradeActionReturnCode = 3247440400.

Under the 'Assessment Errors Detected' Group, each of the 4 sub groups matches a code in _SMSTSOSUpgradeActionReturnCode. For example, the 'Compatibility Issues found (hard block)' group has a condition for _SMSTSOSUpgradeActionReturnCode = 3247440392.

Then each error code displays a custom message and errors the Task Sequence out. For the  'Compatibility Issues found (hard block)' error it shows

The Upgrade Assessment detected an error which is preventing a successful upgrade and it must be mitigated first. There is an application or driver that must be removed first. This is generally due to an old version of Sophos Safeguard present. Please contact the IT Service Desk for assistance.

Again, these groups are just a final sanity check, While the Readiness tool identifies bullet 2 impacted systems, ConfigMgr collections are identifying the last two bullets for example.


This TaskSequence is provided as-is, no warranty is provided or implied.The author is NOT responsible for any damages or data loss that may occur through the use of this TaskSequence.  Always test, test, test before rolling anything into a production environment.

Per request I have made a sample Task Sequence available here so you can see it in action.


  1. Is it possible to download the task sequence somewhere?

    Thanks in advance ;)

  2. Can you please share the TS for use within my home lab for testing.


  3. Hello Michael & Ram. I have updated the post to include a sample Task Sequence.

  4. Thanks Kevin. Appreciate your help.

  5. Created the package, imported the task sequence and edited. All looking good.

  6. I had to disable apply latest cumulative update. I guess you had created update package and included in the task sequence.

  7. I included how I handled Drivers as well as the applying the latest cumulative so that at first boot its almost completely patched. I Can reference this one Task Sequence in several posts.

  8. Thanks Kevin. How were you able to convert hexadecimal for above errors. Example 3247440400 = 0xC1900210.

    I am getting 327 error for in place upgrade. I ran windows 10 setup on the same machine and the upgrade assessment was successful - yet the task sequence fails. I can share more information if you need.



  9. Hey Ram. As mentioned in my article, 0xC1900210 is no errors found. You should find this as a not equal on the 'Assessment Errors Detected' group and have this error code as an equals on the Upgrade the OS group. This way it does not go into the error codes group and will move forward with the upgrade OS steps.

    For the conversion I used which I link to above.

  10. Thanks Kevin for sharing your input and link for converter. Finally the test in place upgrade is successful. Now we are not facing any issue with Win 10 in place upgrade.

    Pretty strange above error that, I experienced during initial test run went away by itself. So no clue how it started to work without any error. Anyway happy the task sequence is working well and deployed to production.

  11. hello Dears,

    I'm facing an error during windows 10 inplace upgrade Migration choice (auto upgrade) not available (probably the wrong SKU or architecture)· 0xC1900204 (3247440388).

    how to resolve this issue or does it mean the it is incompatible at all?

    any suggestion appriciated, thank you

  12. Hi Kevin, which source files (package) are needed for this step "Applying Latest Cumulative Update"

  13. Hello Sebastion.

    Download the MSU file from Microsoft Update Catalog. Just search for the KB and download it, say' windows10.0-kb4093112-x64_08237e229b9c1de3e8878674f5815ca2746c6a2a.msu' for the 64-Bit update for KB4093112.

    Create a standard package and put this file in it.

    Create Run Command line step called 'Apply W10 Cumulative Update' step (right after 'Apply Operating System' step) and source this package and run 'Dism /Image:%OSDISK%\ /Add-Package /Packagepath:"." /ScratchDir:"%OSDISK%\Windows\Temp"'

    Then each month, or when a new cumulative comes out, you just download the MSU and change the package this step sources. Very quick.

  14. Thanks Kevin. You TS download has
    cmd /c "FOR %h IN (%_SMSTSMDataPath%\Cumulative\*.msu) DO START /WAIT WUSA %h /QUIET /NORESTART"

    Is it best to use this or the above command here?

  15. Andy, whats in the TS download is what should be used during an in-place upgrade. After the upgrade Windows step and it first boots up you would rom the for loop. Earlier there is a step to download the update to this temp path (%_SMSTSMDataPath%\Cumulative). What I gave Sebastion was actually for a new deployment to be ran via PE.

  16. Kevin, this is a great post, thank you! Question for you: Do you know what the user experience is if there is a "dismissible compatibility message"? Last time I tried checking all the boxes on the Upgrade OS step, I noticed in the windows upgrade logs (not the SCCM logs) that the Ignore dismissible compatibility messages setting gets ignored. I end up having to turn off dynamic updates because i don't want any user prompts, but I've never actually seen one of those prompts so I wonder if I'm being overly cautious.