Last active
May 31, 2024 12:13
-
-
Save Ioan-Popovici/bb5404be898c41f3be498a99c26f1d0b to your computer and use it in GitHub Desktop.
List devices by boundary group, boundary and network information.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
.SYNOPSIS | |
List devices by boundary and network information. | |
.DESCRIPTION | |
List devices by boundary group, boundary and network information. | |
.NOTES | |
Created by Ioan Popovici | |
Part of a report should not be run separately. | |
Requires | |
CM_Tools.dbo.ufn_IsIPInSubnet | |
CM_Tools.dbo.ufn_IsIPInRange | |
CM_Tools.dbo.ufn_CIDRFromIPMask | |
.LINK | |
https://SCCM.Zone/SIT-Devices-by-Boundary-and-Network | |
.LINK | |
https://SCCM.Zone/SIT-Devices-by-Boundary-and-Network-CHANGELOG | |
.LINK | |
https://SCCM.Zone/SIT-Devices-by-Boundary-and-Network-GIT | |
.LINK | |
https://SCCM.Zone/Issues | |
*/ | |
/*##=============================================*/ | |
/*## QUERY BODY */ | |
/*##=============================================*/ | |
/* Testing variables !! Need to be commented for Production !! */ | |
--DECLARE @UserSIDs AS NVARCHAR(10) = 'Disabled'; | |
--DECLARE @CollectionID AS NVARCHAR(10) = 'HUB0074A'; | |
--DECLARE @Locale AS INTEGER = '2'; | |
/* Variable declaration */ | |
DECLARE @LCID AS INTEGER = dbo.fn_LShortNameToLCID (@Locale); | |
WITH BoundaryData_CTE (Occurrences, Device, Managed, OperatingSystem, DomainOrWorkgroup, ADSite, SCCMSite, SCCMSiteCode, BoundaryGroup, Boundary, IPAddress, IPSubnet, IPSubnetMask) | |
AS ( | |
/* Get boundary data */ | |
SELECT | |
Occurrences = Count(*) OVER (PARTITION BY Systems.ResourceID) -- Count ResourceID occurrences | |
, Device = ISNULL(NULLIF(Systems.NetBios_Name0, '-'), 'N/A') | |
, Managed = ( | |
CASE Systems.Client0 | |
WHEN 1 THEN 'Yes' | |
ELSE 'No' | |
END | |
) | |
, OperatingSystem = ( | |
/* Get OS caption by version */ | |
CASE | |
WHEN Systems.Operating_System_Name_And0 LIKE '%Workstation 5.%' THEN 'Windows XP' | |
WHEN Systems.Operating_System_Name_And0 LIKE '%Workstation 6.0%' THEN 'Windows Vista' | |
WHEN Systems.Operating_System_Name_And0 LIKE '%Workstation 6.1%' THEN 'Windows 7' | |
WHEN Systems.Operating_System_Name_And0 LIKE 'Windows_7 Entreprise 6.1' THEN 'Windows 7' | |
WHEN Systems.Operating_System_Name_And0 = 'Windows Embedded Standard 6.1' THEN 'Windows 7' | |
WHEN Systems.Operating_System_Name_And0 LIKE '%Workstation 6.2%' THEN 'Windows 8' | |
WHEN Systems.Operating_System_Name_And0 LIKE '%Workstation 6.3%' THEN 'Windows 8.1' | |
WHEN Systems.Operating_System_Name_And0 LIKE '%Workstation 10%' THEN 'Windows 10' | |
WHEN Systems.Operating_System_Name_And0 LIKE '%Workstation 10%' THEN 'Windows 10' | |
WHEN Systems.Operating_System_Name_And0 LIKE '%Server 5.%' THEN 'Windows Server 2003' | |
WHEN Systems.Operating_System_Name_And0 LIKE '%Server 6.0%' THEN 'Windows Server 2008' | |
WHEN Systems.Operating_System_Name_And0 LIKE '%Server 6.1%' THEN 'Windows Server 2008 R2' | |
WHEN Systems.Operating_System_Name_And0 LIKE '%Server 6.2%' THEN 'Windows Server 2012' | |
WHEN Systems.Operating_System_Name_And0 LIKE '%Server 6.3%' THEN 'Windows Server 2012 R2' | |
WHEN Systems.Operating_System_Name_And0 LIKE '%Server 10%' THEN ( | |
CASE | |
WHEN CAST(REPLACE(Build01, '.', '') AS INTEGER) > 10017763 THEN 'Windows Server 2019' | |
ELSE 'Windows Server 2016' | |
END | |
) | |
ELSE Systems.Operating_System_Name_And0 | |
END | |
) | |
, DomainOrWorkgroup = ISNULL(Full_Domain_Name0, Systems.Resource_Domain_Or_Workgr0) | |
, ADSite = CombinedResources.ADSiteName | |
, SCCMSite = Sites.SiteName | |
, SCCMSiteCode = CombinedResources.SiteCode | |
, BoundaryGroup = ISNULL(BoundaryGroup.Name, 'N/A') | |
, Boundary = ISNULL(Boundary.DisplayName, 'N/A') | |
, IPAddress = Network.IPAddress0 | |
, IPSubnet = ( | |
CASE | |
/* Support function */ | |
WHEN CM_Tools.dbo.ufn_IsIPInSubnet(Network.IPAddress0, Subnets.IP_Subnets0, Network.IPSubnet0) = 1 | |
THEN Subnets.IP_Subnets0 | |
ELSE NULL | |
END | |
) | |
, IPSubnetMask = ( | |
CASE | |
/* Support function */ | |
WHEN CM_Tools.dbo.ufn_IsIPInSubnet(Network.IPAddress0, Subnets.IP_Subnets0, Network.IPSubnet0) = 1 | |
/* Support function */ | |
THEN Network.IPSubnet0 + CM_Tools.dbo.ufn_CIDRFromIPMask(Network.IPSubnet0) -- Add CIDR to the IP subnet | |
ELSE NULL | |
END | |
) | |
FROM fn_rbac_FullCollectionMembership(@UserSIDs) AS CollectionMembers | |
LEFT JOIN v_R_System AS Systems ON Systems.ResourceID = CollectionMembers.ResourceID | |
LEFT JOIN v_CombinedDeviceResources AS CombinedResources ON CombinedResources.MachineID = CollectionMembers.ResourceID | |
LEFT JOIN v_Site AS Sites ON Sites.SiteCode = CombinedResources.SiteCode | |
LEFT JOIN v_Network_DATA_Serialized AS Network ON Network.ResourceID = CollectionMembers.ResourceID | |
AND IPEnabled0 = 1 -- Exclude non-enabled adapters | |
AND Network.IPAddress0 NOT LIKE '%:%' -- Exclude IPv6 | |
LEFT JOIN v_RA_System_IPSubnets AS Subnets ON Subnets.ResourceID = CollectionMembers.ResourceID | |
INNER JOIN vSMS_Boundary AS Boundary ON | |
( | |
CASE | |
WHEN Boundary.BoundaryType = 0 | |
/* Support function */ | |
THEN CM_Tools.dbo.ufn_IsIPInSubnet(Network.IPAddress0, Boundary.Value, Network.IPSubnet0) | |
WHEN Boundary.BoundaryType = 1 AND Boundary.Value = CombinedResources.ADSiteName | |
THEN 1 | |
WHEN Boundary.BoundaryType = 3 | |
/* Support function */ | |
THEN CM_Tools.dbo.ufn_IsIPInRange(Network.IPAddress0, Boundary.Value) | |
END | |
) = 1 -- Join only if the Boundary value matches ADSiteName or is in the computer subnet or subnet range. | |
INNER JOIN vSMS_BoundaryGroupMembers AS BoundaryRelation ON BoundaryRelation.BoundaryID = Boundary.BoundaryID | |
INNER JOIN vSMS_BoundaryGroup AS BoundaryGroup ON BoundaryGroup.GroupID = BoundaryRelation.GroupID | |
WHERE CollectionMembers.CollectionID = @CollectionID | |
) | |
/* Remove rows that have no subnet only when a ResourceID is present more than once in the result */ | |
SELECT | |
Device | |
, Managed | |
, OperatingSystem | |
, DomainOrWorkgroup | |
, ADSite | |
, SCCMSite | |
, SCCMSiteCode | |
, BoundaryGroup | |
, Boundary | |
, IPAddress | |
, IPSubnet | |
, IPSubnetMask | |
FROM BoundaryData_CTE AS BoundaryData | |
WHERE ( | |
(BoundaryData.Occurrences > 1 AND BoundaryData.IPSubnet IS NOT NULL) -- Remove all rows that have no subnet | |
OR | |
(BoundaryData.Occurrences = 1) -- Keep at least one occurrence, even if the subnet is NULL | |
) | |
/*##=============================================*/ | |
/*## END QUERY BODY */ | |
/*##=============================================*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment