We started deploying Windows 10 on a wider scale to our users in the summer of 2016. However, our SCCM installation was broken at the time, so we weren’t able to provide too much in the ways of updates. We created a from-scratch task sequence of Windows 10 using 1511 as our base, figuring that once that was done ahead of the 2016-17 school year, we could then concentrate on repairing, restoring, or reinstalling SCCM.
Several months later, we reinstalled SCCM and updated to 1702. Now we can get back to work.
I wanted to know which of the machines out there that have Win10 are still on versions older than 1607 so we’d know what we’re dealing with for the forthcoming upgrade project. To do this, I created a query in the Config Mgr console:
Start by clicking Create Query either in the ribbon or right-clicking on “Queries” in the navigation pane or in the results pane. This launches the Create Query Wizard.
Enter a name. I used “Who’s not Win10 1607?” I also limited the search to “All Workstations.” Click “Edit Query Statement…”
Under the “Criteria” tab, I created a new criterion (click the star button).
In Criterion Type, leave the type as “Simple Value” and click “Select…” Choose “Operating System – Version.” For the Operator, choose “is less than” and type “10.0.14393” in “Value.”
Note: if you want to include 1607, change the operator to “less than or equal to” instead.
Also note: the value field is a string value, so we’re lucky in that “10.0.xxxxx” occurs earlier as a string than Windows 7 and Windows 8 versions (which start with 6). If I wanted only Windows 7 or Windows 8 machines, I’d have to get a little fancier with my criteria if I didn’t want to include Windows 10 in the results.
Click OK.
For my query, I only wanted certain fields (columns), not all of them. So I chose Name, Last Logon User Name, Last Logon Time Stamp, Version, Last Boot-up Time, IP Addresses, and Operating System Readiness Branch. You can choose other fields by clicking the “Select” button and going through the desired attributes.
To use this set, you can also use my query in a query language window if you don’t want to go through the click/select process. Click the “Show Query Language” button and copy/paste this:
select SMS_R_System.Name, SMS_R_System.LastLogonUserName, SMS_R_System.LastLogonTimestamp, SMS_G_System_OPERATING_SYSTEM.Version, SMS_G_System_OPERATING_SYSTEM.LastBootUpTime, SMS_R_System.IPAddresses, SMS_R_System.OSBranch from SMS_R_System inner join SMS_G_System_OPERATING_SYSTEM on SMS_G_System_OPERATING_SYSTEM.ResourceID = SMS_R_System.ResourceId where SMS_G_System_OPERATING_SYSTEM.Version < "10.0.14393" order by SMS_G_System_OPERATING_SYSTEM.Version
Note: Change the < to <= if you want to include 1607.
Once you’re done, run the query. I have 45 devices on versions of Win 10 earlier than 1607:
I can see now that most of my users are on Current Branch. I have three on 1507 (support for which just ended), and given who the users are, they need updates (updating won’t break what they do). Everyone else is on 1511.
When I change my query to <= 10.0.14393 instead, I get over 150 results, so that means most of my deployments are on 1607 (yay!).
Finally, a side benefit I discovered in this query is that I could find a few incorrectly named computers that have Windows 10 deployed. Our naming convention includes the form factor of a device as well as its OS version so that we can see what we’re dealing with at a quick glance without having to look it up. Within the first five entries, I see three computers that need to be renamed (which is a help desk ticket for the technicians responsible for those areas).