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 -
Program
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.
Results
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.
Reporting
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
Thanks,
Arnab Mitra
Comments
- Anonymous
September 25, 2017
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.- Anonymous
September 25, 2017
I just uploaded the legacy version for download.
- Anonymous
- Anonymous
September 25, 2017
Will this show what software in not compatible with Windows 10 in the log or XML file?- Anonymous
September 25, 2017
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.
- Anonymous
- Anonymous
October 01, 2017
The comment has been removed- Anonymous
October 01, 2017
The comment has been removed- Anonymous
October 01, 2017
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?- Anonymous
October 01, 2017
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 != '*'
- Anonymous
- Anonymous
- Anonymous
- Anonymous
April 01, 2018
The comment has been removed- Anonymous
April 03, 2018
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.- Anonymous
April 06, 2018
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.- Anonymous
April 06, 2018
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?- Anonymous
April 08, 2018
The comment has been removed- Anonymous
June 18, 2018
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.
- Anonymous
- Anonymous
- Anonymous
- Anonymous
- Anonymous
- Anonymous
November 18, 2018
HiHow do i analyse *.xml and *.log files to find more detail about why specific system fails?- Anonymous
November 18, 2018
Leverage the SetupDiag utility. You can download it from - https://docs.microsoft.com/en-us/windows/deployment/upgrade/setupdiag
- Anonymous
- Anonymous
March 27, 2019
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 successScan Code Hex - #ErrorDescription - #ErrorAny suggestions? Thanks- Anonymous
March 30, 2019
The comment has been removed
- Anonymous