SCCM Hardware inventory custom queries 2 ( Specified RAM, Hard Drive details)
The SQL query provided in this post is designed to extract a wealth of information from your SCCM database. Here’s a breakdown of what it does:
- Hostname
and Model Information:
- Retrieves
the NetBIOS name (hostname) and the model of each PC.
- Operating
System Details:
- Fetches
the OS version and build number, which is essential for ensuring
compliance and identifying systems that need updates.
- Processor
Information:
- Gathers
details about the processor, including its name, number of cores, and
logical processors.
- Memory
Configuration:
- Concatenates
information about all RAM slots, including capacity, type, and bus speed,
providing a complete picture of the system’s memory configuration.
- Storage
Details:
- Retrieves
information about the type and model of each drive, as well as the total
and free space on each logical disk.
- Total
Memory and Disk Size:
- Calculates
the total physical memory and the sum of all logical disk sizes, giving
you an overview of the system’s storage capacity.
DECLARE
@CollectionID NVARCHAR(8);
SET
@CollectionID = 'SMS00001'; -- All Systems, change this to your target
collection if needed
SELECT
DISTINCT
sys.Netbios_Name0 AS 'Hostname',
comp.Model0 AS 'PC Model Name',
-- OS Information
os.Caption0 AS 'OS Version',
os.BuildNumber0 AS 'OS Build',
-- Processor Details
processor.Name0 AS 'Processor Name',
processor.NumberOfCores0 AS 'Processor
Cores',
processor.NumberOfLogicalProcessors0 AS
'Logical Processors',
-- Memory Information - Using STUFF/FOR XML
to concatenate all RAM slots for a system
STUFF(
(SELECT ', ' + 'Slot: ' +
mem.BankLabel0 +
', Capacity: ' +
CAST(mem.Capacity0/1024 AS VARCHAR(10)) + ' GB' +
', Type: ' + CASE
WHEN mem.FormFactor0 = 8
THEN 'DIMM'
WHEN mem.FormFactor0 = 12
THEN 'SODIMM'
ELSE 'Other'
END
FROM v_GS_PHYSICAL_MEMORY mem
WHERE mem.ResourceID = sys.ResourceID
FOR XML PATH(''), TYPE).value('.',
'NVARCHAR(MAX)'),
1, 2, ''
) AS 'RAM Configuration',
-- RAM Bus Speed
STUFF(
(SELECT DISTINCT ', ' + CAST(mem.Speed0
AS NVARCHAR(10)) + ' MHz'
FROM v_GS_PHYSICAL_MEMORY mem
WHERE mem.ResourceID = sys.ResourceID
FOR XML PATH(''), TYPE).value('.',
'NVARCHAR(MAX)'),
1, 2, ''
) AS 'RAM Bus Speed',
-- Hard Drive Type/Model Information with
unique drive letters
STUFF(
(SELECT DISTINCT ', ' +
ISNULL(pd.Model0, 'Unknown
Model') + ' (' +
CASE pd.MediaType0
WHEN 0 THEN 'Unspecified'
WHEN 3 THEN 'HDD'
WHEN 4 THEN 'SSD'
WHEN 5 THEN 'SCM'
ELSE 'Unknown'
END + ') ' +
STUFF(
(SELECT DISTINCT ',' +
ld_sub.DeviceID0
FROM v_GS_LOGICAL_DISK
ld_sub
LEFT JOIN v_GS_PHYSICAL_DISK
pd_sub ON ld_sub.ResourceID = pd_sub.ResourceID
WHERE ld_sub.ResourceID =
sys.ResourceID
AND (pd_sub.Model0 =
pd.Model0 OR (pd_sub.Model0 IS NULL AND pd.Model0 IS NULL))
AND (pd_sub.MediaType0 =
pd.MediaType0 OR (pd_sub.MediaType0 IS NULL AND pd.MediaType0 IS NULL))
GROUP BY ld_sub.DeviceID0
FOR XML PATH(''),
TYPE).value('.', 'NVARCHAR(MAX)'),
1, 1, ''
)
FROM v_GS_LOGICAL_DISK ld
LEFT JOIN v_GS_PHYSICAL_DISK pd ON
ld.ResourceID = pd.ResourceID
WHERE ld.ResourceID = sys.ResourceID
GROUP BY pd.Model0, pd.MediaType0
FOR XML PATH(''), TYPE).value('.',
'NVARCHAR(MAX)'),
1, 2, ''
) AS 'Drive Types',
-- Hard Drive Space Information with unique
drive letters
STUFF(
(SELECT DISTINCT ', ' +
ld_inner.deviceid0 + ' (' +
CAST(ld_inner.Size0/1024 AS
VARCHAR(20)) + ' GB, Free: ' +
CAST(ld_inner.FreeSpace0/1024
AS VARCHAR(20)) + ' GB)'
FROM v_GS_LOGICAL_DISK AS ld_inner
WHERE ld_inner.ResourceID =
sys.ResourceID
GROUP BY ld_inner.deviceid0,
ld_inner.Size0, ld_inner.FreeSpace0
FOR XML PATH(''), TYPE).value('.',
'NVARCHAR(MAX)'),
1, 2, ''
) AS 'Drive Space',
-- Total Physical Memory (as in your
reference query)
m.TotalPhysicalMemory0 / 1000 AS 'Total
Memory (MB)',
-- Full Hard Disk Size (Summing all logical
disk sizes)
(SELECT SUM(ld_inner.Size0) / 1024
FROM v_GS_LOGICAL_DISK ld_inner
WHERE ld_inner.ResourceID =
sys.ResourceID) AS 'Total Hard Disk Size (GB)'
FROM
v_R_System sys
INNER JOIN
v_FullCollectionMembership fcm ON sys.ResourceID = fcm.ResourceID
LEFT JOIN
v_GS_COMPUTER_SYSTEM comp ON sys.ResourceID = comp.ResourceID
LEFT JOIN
v_GS_PROCESSOR processor ON sys.ResourceID = processor.ResourceID
LEFT JOIN
v_GS_OPERATING_SYSTEM os ON sys.ResourceID = os.ResourceID
LEFT JOIN
v_GS_X86_PC_MEMORY m ON sys.ResourceID = m.ResourceID
WHERE
fcm.CollectionID = @CollectionID
AND
fcm.ResourceType = 5 -- Devices Only
ORDER BY
sys.Netbios_Name0;
----------------------------------------------------------------------------------------------------------------------