Hi, By default, LM doesn't seem to monitor the Build Revision of Windows devices. E.g. It knows something is running Server 2019, but it doesn't know it's running 17636. 9121 . The last four digits are what changes every month when you install updates. I wrote a simple module to grab that information from every Windows device. I also created a Dashboard that you can use to visually see how many devices are up to date and how many are old. I know I could have just put the Build Revision in its own property, but this way the whole thing is in one place. I tried to publish it to the Exchange but apparently that process is broken or something So, I figured I'd just upload it here instead in case anyone is interested. Property Screenshot Dashboard Sample Hmm. Apparently there's no way to upload a file to a post? You'll have to save the text below as a JSON file and then import it I guess. I don't know if all the stuff below is needed, it's just what it gave me when I did an Export. Module {
"searchKeywords": "",
"integrationMetadata": {
"publishedAtMS": 1786125969729,
"registryVersion": "1.0.0",
"name": "",
"checksum": "ce2a6998180cd94967b68b3a93fe0306",
"registryId": "e15c5d79-315b-4827-bd45-6a5687174a92",
"isPrivate": true,
"locator": "3A926C",
"lineageId": "tDiDDv3nR8eduyik90gmvg",
"status": "SECURITY_REVIEW"
},
"name": "Windows_Version_Full",
"description": "This module pulls the full Windows Version from a Server or Workstation running Windows 10/2016 or newer. It is stored in the property called auto.os.version.windowsfull.\n\nIt is designed to work with a Dashboard using Resource Explorer widgets filtered on the 3rd octet to visibly see how many devices are on the latest version and how many are behind.",
"appliesTo": "iswindows()",
"type": 5,
"technicalNotes": "",
"version": 1786127617,
"registryMetadata": {
"currentUuid": "tDiDDv3nR8eduyik90gmvg",
"originalUuid": "GfnjKuDIR5G9wKib37djPw",
"locatorId": "",
"registryVersion": "1.0.0",
"checksum": "ce2a6998180cd94967b68b3a93fe0306",
"namespace": "",
"registryId": "",
"isChangedFromOrigin": true,
"status": ""
},
"script": {
"type": "powershell",
"content": "$computer = \"##HOSTNAME##\"\r\n$Cred = $null\r\n$LMUser = \"##WMI.USER##\"\r\n$LMPass = \"##WMI.PASS##\"\r\n\r\nif ($LMUser -and $LMUser -ne \"\" -and $LMPass -and $LMPass -ne \"\") {\r\n try {\r\n $SecurePass = ConvertTo-SecureString $LMPass -AsPlainText -Force\r\n $Cred = New-Object System.Management.Automation.PSCredential ($LMUser, $SecurePass)\r\n } catch {\r\n Write-Host \"os.version.WindowsFull=Error creating credential: $($_.Exception.Message)\"\r\n exit\r\n }\r\n}\r\n\r\ntry {\r\n\r\n if ($Cred) {\r\n\t\t\t$version = Invoke-Command -ComputerName $computer -Credential $Cred -ScriptBlock {\r\n\t\t\t\t$w = Get-ItemProperty 'HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion' -ErrorAction Stop\r\n\r\n\t\t\t\tif ($null -ne $w.CurrentMajorVersionNumber -and $null -ne $w.CurrentMinorVersionNumber) {\r\n\t\t\t\t\t$major = $w.CurrentMajorVersionNumber\r\n\t\t\t\t\t$minor = $w.CurrentMinorVersionNumber\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t$cv = [version]$w.CurrentVersion\r\n\t\t\t\t\t$major = $cv.Major\r\n\t\t\t\t\t$minor = $cv.Minor\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$build = if ($w.CurrentBuildNumber) { $w.CurrentBuildNumber } else { $w.CurrentBuild }\r\n\t\t\t\t$ubr = $w.UBR\r\n\t\t\t\t\r\n\t\t\t\t\"{0}.{1}.{2}.{3}\" -f $major, $minor, $build, $ubr\r\n\t\t\t} -ErrorAction Stop\r\n\r\n } else {\r\n\r\n\t\t\t$version = Invoke-Command -ComputerName $computer -ScriptBlock {\r\n\t\t\t\t$w = Get-ItemProperty 'HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion' -ErrorAction Stop\r\n\r\n\t\t\t\tif ($null -ne $w.CurrentMajorVersionNumber -and $null -ne $w.CurrentMinorVersionNumber) {\r\n\t\t\t\t\t$major = $w.CurrentMajorVersionNumber\r\n\t\t\t\t\t$minor = $w.CurrentMinorVersionNumber\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t$cv = [version]$w.CurrentVersion\r\n\t\t\t\t\t$major = $cv.Major\r\n\t\t\t\t\t$minor = $cv.Minor\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$build = if ($w.CurrentBuildNumber) { $w.CurrentBuildNumber } else { $w.CurrentBuild }\r\n\t\t\t\t$ubr = $w.UBR\r\n\r\n\t\t\t\t\"{0}.{1}.{2}.{3}\" -f $major, $minor, $build, $ubr\r\n\t\t\t} -ErrorAction Stop\r\n }\r\n\r\nWrite-Host \"os.version.WindowsFull=$version\"\r\nexit 0\r\n}\r\ncatch {\r\n Write-Host \"Error: $($_.Exception.Message)\"\r\n exit 1\r\n}"
},
"group": ""
}
Dashboard {
"santabaRelease": 243,
"defaultDashboardFilters": {
"defaultDashboardFilterDetails": []
},
"widgetTokens": [],
"name": "Windows Versions (Patching)",
"description": "",
"overwriteGroupFields": false,
"widgetsConfigVersion": 2,
"type": "dashboard",
"widgets": [
{
"position": {
"col": 1,
"sizex": 10,
"row": 1,
"sizey": 7
},
"config": {
"vizInfo": {
"alertFilters": {
"datapointsFilterMode": "INCLUDE",
"isIgnoreSdtAlerts": true,
"datapointFilters": []
},
"groupBy": [
{
"name": "auto.os.version.windowsfull",
"label": "",
"type": "RESOURCE_PROPERTY"
}
],
"filterBy": {
"severityFilters": {
"critical": true,
"warning": true,
"none": true,
"error": true
},
"filters": [
{
"name": "auto.os.version.windowsfull",
"label": "",
"type": "RESOURCE_PROPERTY",
"inclusionType": "INCLUDE",
"value": [
{
"label": "*14393*",
"value": "*14393*"
}
]
}
]
}
},
"displaySettings": {
"zoomLevel": 100,
"showFilter": false,
"sortType": "PROPERTY_VALUE_REVERSE",
"fontSize": "medium",
"visualizationLayout": "HIVE"
},
"isSupportCustomProperty": false,
"supportCustomProperty": false,
"name": "Server 2016",
"description": "",
"theme": "newBorderGray",
"interval": 15,
"type": "viz",
"timescale": "day",
"version": 2,
"widgetConfig": "{\"vizInfo\": {\n \"alertFilters\": {\n \"datapointsFilterMode\": \"INCLUDE\",\n \"isIgnoreSdtAlerts\": true,\n \"datapointFilters\": []\n },\n \"groupBy\": [{\n \"name\": \"auto.os.version.windowsfull\",\n \"label\": \"\",\n \"type\": \"RESOURCE_PROPERTY\"\n }],\n \"filterBy\": {\n \"severityFilters\": {\n \"critical\": true,\n \"warning\": true,\n \"none\": true,\n \"error\": true\n },\n \"filters\": [{\n \"name\": \"auto.os.version.windowsfull\",\n \"label\": \"\",\n \"type\": \"RESOURCE_PROPERTY\",\n \"inclusionType\": \"INCLUDE\",\n \"value\": [{\n \"label\": \"*14393*\",\n \"value\": \"*14393*\"\n }]\n }]\n }\n}}"
}
},
{
"position": {
"col": 1,
"sizex": 10,
"row": 8,
"sizey": 4
},
"config": {
"vizInfo": {
"alertFilters": {
"datapointsFilterMode": "INCLUDE",
"isIgnoreSdtAlerts": true,
"datapointFilters": []
},
"groupBy": [
{
"name": "auto.os.version.windowsfull",
"label": "",
"type": "RESOURCE_PROPERTY"
}
],
"filterBy": {
"severityFilters": {
"critical": true,
"warning": true,
"none": true,
"error": true
},
"filters": [
{
"name": "auto.os.version.windowsfull",
"label": "",
"type": "RESOURCE_PROPERTY",
"inclusionType": "INCLUDE",
"value": [
{
"label": "*17763*",
"value": "*17763*"
}
]
}
]
}
},
"displaySettings": {
"zoomLevel": 100,
"showFilter": false,
"sortType": "PROPERTY_VALUE_REVERSE",
"fontSize": "medium",
"visualizationLayout": "HIVE"
},
"isSupportCustomProperty": false,
"supportCustomProperty": false,
"name": "Server 2019",
"description": "",
"theme": "newBorderGray",
"interval": 15,
"type": "viz",
"timescale": "day",
"version": 2,
"widgetConfig": "{\"vizInfo\": {\n \"alertFilters\": {\n \"datapointsFilterMode\": \"INCLUDE\",\n \"isIgnoreSdtAlerts\": true,\n \"datapointFilters\": []\n },\n \"groupBy\": [{\n \"name\": \"auto.os.version.windowsfull\",\n \"label\": \"\",\n \"type\": \"RESOURCE_PROPERTY\"\n }],\n \"filterBy\": {\n \"severityFilters\": {\n \"critical\": true,\n \"warning\": true,\n \"none\": true,\n \"error\": true\n },\n \"filters\": [{\n \"name\": \"auto.os.version.windowsfull\",\n \"label\": \"\",\n \"type\": \"RESOURCE_PROPERTY\",\n \"inclusionType\": \"INCLUDE\",\n \"value\": [{\n \"label\": \"*17763*\",\n \"value\": \"*17763*\"\n }]\n }]\n }\n}}"
}
},
{
"position": {
"col": 1,
"sizex": 10,
"row": 12,
"sizey": 3
},
"config": {
"vizInfo": {
"alertFilters": {
"datapointsFilterMode": "INCLUDE",
"isIgnoreSdtAlerts": true,
"datapointFilters": []
},
"groupBy": [
{
"name": "auto.os.version.windowsfull",
"label": "",
"type": "RESOURCE_PROPERTY"
}
],
"filterBy": {
"severityFilters": {
"critical": true,
"warning": true,
"none": true,
"error": true
},
"filters": [
{
"name": "auto.os.version.windowsfull",
"label": "",
"type": "RESOURCE_PROPERTY",
"inclusionType": "INCLUDE",
"value": [
{
"label": "*20348*",
"value": "*20348*"
}
]
}
]
}
},
"displaySettings": {
"zoomLevel": 100,
"showFilter": false,
"sortType": "PROPERTY_VALUE_REVERSE",
"fontSize": "medium",
"visualizationLayout": "HIVE"
},
"isSupportCustomProperty": false,
"supportCustomProperty": false,
"name": "Server 2022",
"description": "",
"theme": "newBorderGray",
"interval": 15,
"type": "viz",
"timescale": "day",
"version": 2,
"widgetConfig": "{\"vizInfo\": {\n \"alertFilters\": {\n \"datapointsFilterMode\": \"INCLUDE\",\n \"isIgnoreSdtAlerts\": true,\n \"datapointFilters\": []\n },\n \"groupBy\": [{\n \"name\": \"auto.os.version.windowsfull\",\n \"label\": \"\",\n \"type\": \"RESOURCE_PROPERTY\"\n }],\n \"filterBy\": {\n \"severityFilters\": {\n \"critical\": true,\n \"warning\": true,\n \"none\": true,\n \"error\": true\n },\n \"filters\": [{\n \"name\": \"auto.os.version.windowsfull\",\n \"label\": \"\",\n \"type\": \"RESOURCE_PROPERTY\",\n \"inclusionType\": \"INCLUDE\",\n \"value\": [{\n \"label\": \"*20348*\",\n \"value\": \"*20348*\"\n }]\n }]\n }\n}}"
}
},
{
"position": {
"col": 1,
"sizex": 10,
"row": 15,
"sizey": 3
},
"config": {
"vizInfo": {
"alertFilters": {
"datapointsFilterMode": "INCLUDE",
"isIgnoreSdtAlerts": true,
"datapointFilters": []
},
"groupBy": [
{
"name": "auto.os.version.windowsfull",
"label": "",
"type": "RESOURCE_PROPERTY"
}
],
"filterBy": {
"severityFilters": {
"critical": true,
"warning": true,
"none": true,
"error": true
},
"filters": [
{
"name": "auto.os.version.windowsfull",
"label": "",
"type": "RESOURCE_PROPERTY",
"inclusionType": "INCLUDE",
"value": [
{
"label": "*26100*",
"value": "*26100*"
}
]
}
]
}
},
"displaySettings": {
"zoomLevel": 100,
"showFilter": false,
"sortType": "PROPERTY_VALUE_REVERSE",
"fontSize": "medium",
"visualizationLayout": "HIVE"
},
"isSupportCustomProperty": false,
"supportCustomProperty": false,
"name": "Server 2025",
"description": "",
"theme": "newBorderGray",
"interval": 15,
"type": "viz",
"timescale": "day",
"version": 2,
"widgetConfig": "{\"vizInfo\": {\n \"alertFilters\": {\n \"datapointsFilterMode\": \"INCLUDE\",\n \"isIgnoreSdtAlerts\": true,\n \"datapointFilters\": []\n },\n \"groupBy\": [{\n \"name\": \"auto.os.version.windowsfull\",\n \"label\": \"\",\n \"type\": \"RESOURCE_PROPERTY\"\n }],\n \"filterBy\": {\n \"severityFilters\": {\n \"critical\": true,\n \"warning\": true,\n \"none\": true,\n \"error\": true\n },\n \"filters\": [{\n \"name\": \"auto.os.version.windowsfull\",\n \"label\": \"\",\n \"type\": \"RESOURCE_PROPERTY\",\n \"inclusionType\": \"INCLUDE\",\n \"value\": [{\n \"label\": \"*26100*\",\n \"value\": \"*26100*\"\n }]\n }]\n }\n}}"
}
}
],
"version": 2
}