Windows 10 Compatibility Scan with Configuration Manager

Before deploying Windows 10, it's a good idea to check the readiness of your existing machines running Windows 7, 8/8.1, Or even Windows 10.

In this blog post I will use setup.exe with /compat scanonly switch to check the compatibility without performing the upgrade. The reason for not choosing the Upgrade task sequence for this job is to avoid sending the whole 3.5 GB source files over the network.

Package & Command line

Here's the command line with switches to silently check the compatibility. setup.exe /Auto Upgrade /Quiet /NoReboot /Compat ScanOnly

Since the clients don't need to download the full set of source files to check the compatibility, as the setup.exe only validates the existence of the files which can be even on a network share. Instead of creating a package with full set of source files, all i am using is a 1KB batch file to call a network share where the source files are located.

Command line of the batch file: -

start /wait \\<ServerShare>\setup.exe /Auto Upgrade /Quiet /NoReboot /Compat ScanOnly

exit /b %errorlevel%

The client will still download some source files which is significantly less than the whole set. Here's a snapshot of the SMB traffic during this operation -


The program for the package above simply executes the batch file. Based on the above network traffic, you might want to set the estimated disk space and the Max allowed run time.

It should run regardless a user is logged on or not.


The resultant output of the scan results is not the typical 0 for success, refer the table below for the list expected Decimal Output returned by ConfigMgr and Hex Code returned by the windows setup log files.


For reporting purposes, you can leverage the attached report which takes the package name as input. Refer the screenshot below.

Task Sequence

The above package can also be called out in a Task Sequence where you can add additional steps to capture logs in case of failure. Attaching the exported TS for reference.

Step 1 – Add an Install Package step to run the above package. Make sure you check the box Continue on error in the Options tab.

Step 2- Add a group to Capture Logs if the result is anything other than -1047526896 which is Success/No issues found.

Step 3 – Map Network Drive to a server share where you want to dump the log files

Step 4 – Create Folder for each computer.

Step 5 – Copy the Log files to the network share.

Step 6 – Copy the XML files to the network share.

Step 7 – Disconnect the Network Drive

Reporting – TS

Refer the attached report which takes the Task Sequence name as input to display the compatibility results. Screenshot below.

Download Reports - Note – The reports are built using SSRS 2016 schema.

Legacy Reports - For importing into SSRS 2008 R2, 2012 & 2014

Download Task Sequence




Arnab Mitra

Comments (18)
  1. Cordell says:

    I get an incompatibility error when importing reports due to being created with 2016. I am still on 2012. Would it be possible to save your reports with a lower version? Thanks.

    1. I just uploaded the legacy version for download.

  2. Andy Kirby says:

    Will this show what software in not compatible with Windows 10 in the log or XML file?

    1. This reports the setup return code, you still need to dig into the XML files for the non-compatible software.
      Use the TS method to capture these in a centralized location for a later review and possibly use OpsMgr/OMS to read and report against them.

  3. Mike says:

    The Legacy Report for Windows 10 Compat Scan:
    – displays #Error for Scan Code – Hex and Description.
    – displays task sequence description rather than Compat Scan Code.
    – also the selection drop down box for Package Name, shows the Task sequences, should this be the Package?

    The Legacy Report for Windows 10 Compat Scan – TS displays as per the article.

    1. Hi Mike, the query for the selection drop down box for package name is “select distinct PackageName from vSMS_ClassicDeploymentAssetDetails”. Run this to validate you get the expected results.
      The rest is expected if the selected package is not the Windows 10 Compat Scan package you deployed.

      1. Mike says:

        Hi Arnab, the query “select distinct PackageName from vSMS_ClassicDeploymentAssetDetails” pulls back a list of Task Sequences, it should be showing me the sccm package/program that I created right?

        1. Actually TS is also considered as a classic deployment and hence returned as a result. To filter TS, modify the parameter to add a where clause like this –
          where ProgramName != ‘*’

  4. Hi Arnab,

    I have imported the legacy reports attached and made changes to the data source. Running the reports gives following error.

    ======For Windows 10 Compat Scan-TS==========
    An error has occurred during report processing. (rsProcessingAborted)
    Query execution failed for dataset ‘CM_DS2’. (rsErrorExecutingCommand)
    The SELECT permission was denied on the object ‘v_Package’, database ‘CM_XXX’, schema ‘dbo’.
    ======For Windows 10 Compat Scan============
    An error has occurred during report processing. (rsProcessingAborted)
    Query execution failed for dataset ‘CM_DS2’. (rsErrorExecutingCommand)
    The SELECT permission was denied on the object ‘vSMS_ClassicDeploymentAssetDetails’, database ‘CM_XXX’, schema ‘dbo’
    We are using SCCM 1710 and I have “Full Administrator” role.
    Any suggestions?


    1. Hi Deepak, it seems you are lacking permissions on the DB level. Check SSRS report security permissions if you need to be explicitly added to ConfigMgr reporting roles.

      1. Thanks Arnab for the response. That issue, is resolved, I am able to run the report, however, for scan code and description, I only get #Error. I look at the report and It seems, I need to add an expression to translate the results? is that correct? If yes, could you please help with the expression.

        1. Hi Deepak, the expressions are already part of the report export and doesnt need any modifications.
          I’d suggest re-importing the report in SSRS. If this doesnt resolve the issue, edit the report to view the expressions if there is any error?

          1. Checked the reports and found the expression in place. Apologies for over looking it earlier.
            However, taking a closer look at the query, found that the StatusDescription column has text value of “The task sequence manager successfully completed execution of the task sequence” or other related text in it and hence the #error output.
            Other columns in this view do not have the return code for setup.exe.
            I am using SCCM 1710, do I need to look at any other view to get this details.
            Or is there any other way to get this details. For now, I am creating a txt file with the logs directory with the exit code. it gives me the data, but a report would be better.

          2. I just tested this on a 1802 lab and was able to see the expected data in report. The StatusDescription column is expected to return a decimal value and not text.

  5. TaunoVu says:


    How do i analyse *.xml and *.log files to find more detail about why specific system fails?

  6. LS82 says:

    Hi Arnab,
    I’ve created a package and deployed to a test machine. Imported the report into SCCM, changed the data source to the SQL instance and changed the catalog to the CM_(Site Code) when i run it I get:
    Compat Scan Code – Program completed with success
    Scan Code Hex – #Error
    Description – #Error

    Any suggestions?


    1. Hi, check the ConfigMgr logs to validate an actual execution of the setup.

Comments are closed.

Skip to main content