I am looking for BigFix Analyses or BigFix relevance to find currently installed Dell hardware versions for items such as PERC, NIC, etc. with only Windows currently built in processes/options. I cannot install Dell Update Command or Dell OSMA on these servers but I still need to get the hardware versions. Does anyone have any analyses or relevance that can help me?
Is the 'BES Inventory and License' site available in your license dashboard? If so, the 'Hardware Information (Windows)' or 'Hardware Information (Linux)' Analyses probably retrieve what you are asking as far as hardware drivers & versions.
If you don't have that site, I'd probably start with WMI or DMI queries. Here's a start that should show the SCSI info (where you'd find PERC)
selects "* from Win32_SCSIController" of wmis
I do have that enabled, but it doesn’t pull in the hardware version and when I run the command you just gave me it is showing the version as blank.
Hm.
Any idea how you'd find it without BigFix? Is it in the Registry? File somewhere? Command output?
I was able to generate an XML but now I need to parse that to get the display name and version based on specific component IDs.
<SVMInventory lang="en" schemaVersion="1.0" timestamp="2026-01-28 11:44:06" invcolVersion="25.12.000 (BLD_37)" invcolBuild="37"> <OperatingSystem osVendor="Microsoft" osCode="WIN" osArch="x86" majorVersion="10" minorVersion="0" spMajorVersion="0" spMinorVersion="0" buildNumber="26100"/> <System systemID="0A6B"/> <Device display="DELL System Update" componentID="105861"> <Application display="DSU" version="0" componentType="APAC"/> </Device> <Device display="BIOS" componentID="159"> <Application display="BIOS" version="2.8.2" componentType="BIOS"/> </Device> <Device display="Power Supply" componentID="108024" enum="PS:0"> <Application display="Power Supply" version="00.18.31" componentType="FRMW"/> </Device> <Device display="Power Supply" componentID="108024" enum="PS:1"> <Application display="Power Supply" version="00.18.31" componentType="FRMW"/> </Device> <Device display="SEP Firmware" componentID="107649" enum="Bay ID =0"> <Application display="SEP Firmware, BayID: 0" version="7.10" componentType="FRMW"/> </Device> <Device display="SEP Firmware" componentID="107649" enum="Bay ID =1"> <Application display="SEP Firmware, BayID: 1" version="7.10" componentType="FRMW"/> </Device> </SVMInventory>
I have tried using XPaths like this but it isn’t working. It gives me a Windows Error
node value of xpaths ("vendorID:a='1000'", "/a:SVMInventory/a:Device/@version") of xml document of file "C:\Program Files (x86)\BigFix Enterprise\BES Client\Inventory.xml"
Any help would be appreciated
Hi @mikinvestigator , here’s some options you can work with:
Q: (node values of attributes "display" of it, node values of attributes "version" of it) of child nodes whose (node name of it = "Application") of selects "/SVMInventory/Device" of xml document of files "C:\Program Files (x86)\BigFix Enterprise\BES Client\Inventory.xml"
A: DSU, 0
A: BIOS, 2.8.2
A: Power Supply, 00.18.31
A: Power Supply, 00.18.31
A: ( SEP Firmware, BayID: 0 ), 7.10
A: ( SEP Firmware, BayID: 1 ), 7.10
T: 1.166 ms
I: plural ( string, string )
//Example with componentID = 107649
Q: (node values of attributes "display" of it, node values of attributes "version" of it) of child nodes whose (node name of it = "Application") of selects "/SVMInventory/Device[@componentID='107649']" of xml document of file "C:\Program Files (x86)\BigFix Enterprise\BES Client\Inventory.xml"
A: ( SEP Firmware, BayID: 0 ), 7.10
A: ( SEP Firmware, BayID: 1 ), 7.10
T: 0.557 ms
I: plural ( string, string )
Is there a way to get the device Display and not the application display?
Hi @mikinvestigator, how about this example below:
Q: (node values of attributes "display" of it, node values of attributes "version" of child nodes whose (node name of it = "Application") of it) of selects "/SVMInventory/Device[@componentID='159']" of xml document of files "C:\Program Files (x86)\BigFix Enterprise\BES Client\Inventory.xml"
A: BIOS, 2.8.2
T: 1.030 ms
I: plural ( string, string )
Q: (node values of attributes "display" of it, node values of attributes "version" of child nodes whose (node name of it = "Application") of it) of selects "/SVMInventory/Device[@componentID='105861']" of xml document of files "C:\Program Files (x86)\BigFix Enterprise\BES Client\Inventory.xml"
A: DELL System Update, 0
T: 0.518 ms
I: plural ( string, string )
All that "/a:" declaration you're doing, as well as the second field in the xpaths(<query>, <namespace>) is for XML documents with namespace definitions, which this one doesn't seem to have. Namespaces would come from XML with one or more xmlns:prefix="namespace_uri", usually in the XML declaration at the top of the document. There's a decent explanation at XML Namespaces
Without namespaces defined in this document, you shouldn't try to use the two-property version for 'xpaths' or any of the '/a:' namespace prefixes. Instead I think the following maybe helpful XML tips
node value of xpaths ("vendorID:a='1000'", "/a:SVMInventory/a:Device/@version") of xml document of file "C:\Program Files (x86)\BigFix Enterprise\BES Client\Inventory.xml"
// Get name of top-level element
q: node names of child nodes of xml document of file "c:\temp\test.xml"
A: SVMInventory
I: plural string
// We can get an xpath directly to that top-level element
q: node names of xpaths ("/SVMInventory") of xml document of file "c:\temp\test.xml"
A: SVMInventory
I: plural string
// find the child nodes of that top-level element
q: node names of child nodes of xpaths ("/SVMInventory") of xml document of file "c:\temp\test.xml"
A: OperatingSystem
A: System
A: Device
A: Device
A: Device
A: Device
A: Device
A: Device
I: plural string
// We can keep iterating to find valid paths
q: node names of child nodes of xpaths ("/SVMInventory/Device") of xml document of file "c:\temp\test.xml"
A: Application
A: Application
A: Application
A: Application
A: Application
A: Application
I: plural string
// Or, at the 'Device' level we can retrieve Attributes
// Attributes, like most things XML, have 'node names' and 'node values'
q: node names of attributes of xpaths ("/SVMInventory/Device") of xml document of file "c:\temp\test.xml"
A: display
A: componentID
A: display
A: componentID
A: display
A: componentID
A: enum
A: display
A: componentID
A: enum
A: display
A: componentID
A: enum
A: display
A: componentID
A: enum
I: plural string
q: (node name of it, node value of it) of attributes of xpaths ("/SVMInventory/Device") of xml document of file "c:\temp\test.xml"
A: display, DELL System Update
A: componentID, 105861
A: display, BIOS
A: componentID, 159
A: display, Power Supply
A: componentID, 108024
A: enum, PS:0
A: display, Power Supply
A: componentID, 108024
A: enum, PS:1
A: display, SEP Firmware
A: componentID, 107649
A: enum, Bay ID =0
A: display, SEP Firmware
A: componentID, 107649
A: enum, Bay ID =1
I: plural ( string, string )
// Or, same from the 'SVMInventory/Device/Application' nodes...
q: (node name of it, node value of it) of attributes of xpaths ("/SVMInventory/Device/Application") of xml document of file "c:\temp\test.xml"
A: display, DSU
A: version, 0
A: componentType, APAC
A: display, BIOS
A: version, 2.8.2
A: componentType, BIOS
A: display, Power Supply
A: version, 00.18.31
A: componentType, FRMW
A: display, Power Supply
A: version, 00.18.31
A: componentType, FRMW
A: display, ( SEP Firmware, BayID: 0 )
A: version, 7.10
A: componentType, FRMW
A: display, ( SEP Firmware, BayID: 1 )
A: version, 7.10
A: componentType, FRMW
I: plural ( string, string )
// The original query you had, looking for some vendorID of '1000', doesn't appear in your test data. So I'm not exactly sure what you want, but here are some things that maybe useful.
// The 'display', 'version', and 'componentType' only:
q: (node value of attribute "display" of it, node value of attribute "version" of it, node value of attribute "componentType" of it) of xpaths ("/SVMInventory/Device/Application") of xml document of file "c:\temp\test.xml"
A: DSU, 0, APAC
A: BIOS, 2.8.2, BIOS
A: Power Supply, 00.18.31, FRMW
A: Power Supply, 00.18.31, FRMW
A: ( SEP Firmware, BayID: 0 ), 7.10, FRMW
A: ( SEP Firmware, BayID: 1 ), 7.10, FRMW
I: plural ( string, string, string )
// If, for example, we wanted to filter to 'Power Supply', we can do that a couple of ways. We can either use the relevance structure `(objects) whose (filter)`, or, if one is more familiar with XML processing in other languages, can use the 'xpath' filters which are pretty robust in BigFix
q: (node value of attribute "display" of it, node value of attribute "version" of it, node value of attribute "componentType" of it) whose (item 0 of it = "Power Supply") of xpaths ("/SVMInventory/Device/Application") of xml document of file "c:\temp\test.xml"
A: Power Supply, 00.18.31, FRMW
A: Power Supply, 00.18.31, FRMW
I: plural ( string, string, string )
q: (node value of attribute "display" of it, node value of attribute "version" of it, node value of attribute "componentType" of it) of xpaths ("/SVMInventory/Device/Application[@display='Power Supply']") of xml document of file "c:\temp\test.xml"
A: Power Supply, 00.18.31, FRMW
A: Power Supply, 00.18.31, FRMW
I: plural ( string, string, string )
This worked great, however, now I have a problem regarding NIC information. Some of my servers have QLogic and some have Intel is there a way to do display contains QLogic or Intel?
I'm sure we could, but can you give a fragment of the Device and Application node for one of them? I'll be there's some way to list out by device type like 'network' so that if you added another type of network card later we could still get it.
Yes, we can filter that in either an XPath way or a Relevance way.
Given the test data you gave before, I'll filter to only 'DSU' or 'BIOS' for examples
// xpath attribute filter
q: (node value of attribute "display" of it, node value of attribute "version" of it, node value of attribute "componentType" of it) of xpaths ("/SVMInventory/Device/Application[@display='DSU' or @display='BIOS']") of xml document of file "c:\temp\test.xml"
A: DSU, 0, APAC
A: BIOS, 2.8.2, BIOS
I: plural ( string, string, string )
// relevance filter
q: (node value of attribute "display" of it, node value of attribute "version" of it, node value of attribute "componentType" of it) whose (item 0 of it = "DSU" or item 0 of it = "BIOS") of xpaths ("/SVMInventory/Device/Application") of xml document of file "c:\temp\test.xml"
A: DSU, 0, APAC
A: BIOS, 2.8.2, BIOS
I: plural ( string, string, string )
The display name won't equal exactly which is where I have the problem.
<Device display="[0041] QLogic 2x25GE QL41262HMKR CNA #41" function="0" device="0" bus="59" subVendorID="1077" subDeviceID="000F" deviceID="8070" vendorID="1077">
<Application display="[0041] QLogic 2x25GE QL41262HMKR CNA #41" version="16.30.09" componentType="FRMW"/>
</Device>
<Device display="[0042] QLogic 2x25GE QL41262HMKR CNA #42" function="1" device="0" bus="59" subVendorID="1077" subDeviceID="000F" deviceID="8070" vendorID="1077">
<Application display="[0042] QLogic 2x25GE QL41262HMKR CNA #42" version="16.30.09" componentType="FRMW"/>
</Device>
<Device display="Intel(R) Ethernet 10G 2P X710-T2L-t OCP" function="0" device="0" bus="42" subVendorID="8086" subDeviceID="000D" deviceID="15FF" vendorID="8086">
<Application display="Intel(R) Ethernet 10G 2P X710-T2L-t OCP" version="24.0.5" componentType="FRMW"/>
</Device>
<Device display="Intel(R) Ethernet Network Adapter X710-TL - EC:E7:A7:0C:99:29" function="0" device="0" bus="0" subVendorID="8086" subDeviceID="0000" deviceID="15FF" vendorID="8086">
<Application display="Intel(R) Ethernet Network Adapter X710-TL - EC:E7:A7:0C:99:29" version="24.0.5" componentType="FRMW"/>
</Device>
Sure, that helps a lot.
With the XPath expression we can use [contains(@display, "Intel") or contains(@display, "QLogic"] to filter. These are case-sensitive. In Relevance we can use whose () clause with 'as lowercase' and 'contains' to make a case-insensitive match.
// xpath attribute filter with 'contains' for partial match. This is case-sensitive.
q: (node value of attribute "display" of it, node value of attribute "version" of it, node value of attribute "componentType" of it) of xpaths ("/SVMInventory/Device/Application[contains(@display, 'Intel') or contains(@display, 'QLogic')]") of xml document of file "c:\temp\test.xml"
A: [0041] QLogic 2x25GE QL41262HMKR CNA #41, 16.30.09, FRMW
A: [0042] QLogic 2x25GE QL41262HMKR CNA #42, 16.30.09, FRMW
A: Intel(R) Ethernet 10G 2P X710-T2L-t OCP, 24.0.5, FRMW
A: Intel(R) Ethernet Network Adapter X710-TL - EC:E7:A7:0C:99:29, 24.0.5, FRMW
I: plural ( string, string, string )
// Relevance comparisons with 'contains'
q: (node value of attribute "display" of it, node value of attribute "version" of it, node value of attribute "componentType" of it) whose (item 0 of it as lowercase contains "Intel" as lowercase or item 0 of it as lowercase contains "QLogic" as lowercase) of xpaths ("/SVMInventory/Device/Application") of xml document of file "c:\temp\test.xml"
A: [0041] QLogic 2x25GE QL41262HMKR CNA #41, 16.30.09, FRMW
A: [0042] QLogic 2x25GE QL41262HMKR CNA #42, 16.30.09, FRMW
A: Intel(R) Ethernet 10G 2P X710-T2L-t OCP, 24.0.5, FRMW
A: Intel(R) Ethernet Network Adapter X710-TL - EC:E7:A7:0C:99:29, 24.0.5, FRMW
I: plural ( string, string, string )
So this is working for most of the devices, I have some Linux Devices that aren't liking the NIC comparisons.
This is one for the PERC that is working.
if (windows of operating system) then if (exists file "C:\Program Files (x86)\BigFix Enterprise\BES Client\Inventory.xml") then if (exists (node value of attribute "display" of it) of xpaths ("/SVMInventory/Device[@vendorID='1000']") of xml document of file "C:\Program Files (x86)\BigFix Enterprise\BES Client\Inventory.xml") then ((node value of attribute "display" of it) of xpaths ("/SVMInventory/Device[@vendorID='1000']") of xml document of file "C:\Program Files (x86)\BigFix Enterprise\BES Client\Inventory.xml") else "N/A" else "No file" else if (linux of operating system) then if (exists file "/var/opt/BESClient/Inventory.xml") then if (exists (node value of attribute "display" of it) of xpaths ("/SVMInventory/Device[@vendorID='1000']") of xml document of file "/var/opt/BESClient/Inventory.xml") then ((node value of attribute "display" of it) of xpaths ("/SVMInventory/Device[@vendorID='1000']") of xml document of file "/var/opt/BESClient/Inventory.xml") else "N/A" else "No file" else "Unsupported OS"
This is the NIC one which is giving me an "The expression could not be evaluated: 19XmlDomDocumentError"
if (windows of operating system) then if (exists file "C:\Program Files (x86)\BigFix Enterprise\BES Client\Inventory.xml") then if (exists (node value of attribute "display" of it) of xpaths ("/SVMInventory/Device/Application[contains(@display, 'Intel') or contains(@display, 'QLogic')]") of xml document of file "C:\Program Files (x86)\BigFix Enterprise\BES Client\Inventory.xml") then ((node value of attribute "display" of it) of xpaths ("/SVMInventory/Device/Application[contains(@display, 'Intel') or contains(@display, 'QLogic')]") of xml document of file "C:\Program Files (x86)\BigFix Enterprise\BES Client\Inventory.xml") else "N/A" else "No file" else if (linux of operating system) then if (exists file "/var/opt/BESClient/Inventory.xml") then if (exists (node value of attribute "display" of it) of xpaths ("/SVMInventory/Device/Application[contains(@display, 'Intel') or contains(@display, 'QLogic')]") of xml document of file "/var/opt/BESClient/Inventory.xml") then ((node value of attribute "display" of it) of xpaths ("/SVMInventory/Device/Application[contains(@display, 'Intel') or contains(@display, 'QLogic')]") of xml document of file "/var/opt/BESClient/Inventory.xml") else "N/A" else "No file" else "Unsupported OS"
I'm not sure why I am getting the XML parse error. I have even tried with just the command below in QNA on the linux device and I get the same error.
((node value of attribute "display" of it) of xpaths ("/SVMInventory/Device/Application[contains(@display, 'Intel') or contains(@display, 'QLogic')]") of xml document of file "/var/opt/BESClient/Inventory.xml")
That's quite strange. We do rely on OS libraries for the XML parsing so there could possibly be some differences but this query seems standard enough.
Could you attach the XML file from the Linux machine, and let me know which flavor of Linux and which client version you're using?
Below is the XML file that is being generated. The Linux Version we are using is RHEL 9.6 and the BES Client is on the newest 11.0.5.204.
?xml version="1.0" encoding="UTF-16"?>
<SVMInventory lang="en" schemaVersion="1.0" timestamp="2026-02-17 06:52:44" invcolVersion="25.12.000 (BLD_37)" invcolBuild="37">
<OperatingSystem osVendor="Redhat" osCode="LIN" osArch="x64" majorVersion="redhat-release-9.6" minorVersion="5.14.0-611.30.1.el9_7.x86_64"/>
<System systemID="0A6B"/>
<Device display="BIOS" componentID="159">
<Application display="BIOS" version="2.9.4" componentType="BIOS"/>
</Device>
<Device display="DELL System Update" componentID="105861">
<Application display="DSU" version="0" componentType="APAC"/>
</Device>
<Device display="Power Supply" componentID="108024" enum="PS:0">
<Application display="Power Supply" version="00.18.31" componentType="FRMW"/>
</Device>
<Device display="Power Supply" componentID="108024" enum="PS:1">
<Application display="Power Supply" version="00.18.31" componentType="FRMW"/>
</Device>
<Device display="Dell SATA SE5130" componentID="112324" enum="CtrlId 0 DeviceId 0" FQDD="Disk.Bay.0:Enclosure.RAID.Integrated.1-1">
<Application display="Firmware for - Disk 0 of PERC H755 Front Controller 0 " version="DG00" componentType="FRMW"/>
</Device>
<Device display="Dell SATA SE5130" componentID="112324" enum="CtrlId 0 DeviceId 2" FQDD="Disk.Bay.1:Enclosure.RAID.Integrated.1-1">
<Application display="Firmware for - Disk 1 of PERC H755 Front Controller 0 " version="DG00" componentType="FRMW"/>
</Device>
<Device display="Dell SATA SE5130" componentID="112324" enum="CtrlId 0 DeviceId 1" FQDD="Disk.Bay.2:Enclosure.RAID.Integrated.1-1">
<Application display="Firmware for - Disk 2 of PERC H755 Front Controller 0 " version="DG00" componentType="FRMW"/>
</Device>
<Device display="Dell SATA SE5130" componentID="112324" enum="CtrlId 0 DeviceId 3" FQDD="Disk.Bay.3:Enclosure.RAID.Integrated.1-1">
<Application display="Firmware for - Disk 3 of PERC H755 Front Controller 0 " version="DG00" componentType="FRMW"/>
</Device>
<Device display="PERC H755 Front Controller 0" function="0" device="0" bus="9d" subVendorID="1028" subDeviceID="1AE1" deviceID="10E2" vendorID="1000">
<Application display="PERC H755 Front Controller 0 Firmware" version="52.30.0-6115" componentType="FRMW"/>
</Device>
<Device display="Backplane Expander FW" componentID="111069" enum="CtrlId 0 DeviceId 40">
<Application display="Backplane Expander FW " version="1.61" componentType="FRMW"/>
</Device>
<Device display="Dell Connectivity Client" componentID="113851">
<Application display="Dell Connectivity Client" version="100.1.0-A00" componentType="APAC"/>
</Device>
<Device display="Integrated Dell Remote Access Controller" componentID="25227">
<Application display="Integrated Dell Remote Access Controller" version="7.20.70.50" componentType="FRMW"/>
</Device>
<Device display="Intel(R) Ethernet 25G 2P E810-XXV OCP - 30:3E:A7:26:1B:74" function="0" device="0" bus="0" subVendorID="8086" subDeviceID="0001" deviceID="159B" vendorID="8086">
<Application display="Intel(R) Ethernet 25G 2P E810-XXV OCP - 30:3E:A7:26:1B:74" version="24.0.5" componentType="FRMW"/>
</Device>
<Device display="Intel(R) Ethernet 25G 2P E810-XXV Adapter - B4:83:51:1F:D5:CE" function="0" device="0" bus="0" subVendorID="8086" subDeviceID="0002" deviceID="159B" vendorID="8086">
<Application display="Intel(R) Ethernet 25G 2P E810-XXV Adapter - B4:83:51:1F:D5:CE" version="24.0.5" componentType="FRMW"/>
</Device>
<Device display="Lifecycle Controller" componentID="28897">
<Application display="Lifecycle Controller" version="7.20.70.50" componentType="APAC"/>
</Device>
</SVMInventory>
I'm assuming the missing < at the first character is just a copy/paste issue to the Forum, right, and the actual XML document does have that at the start?
Can you post what the first line XML declaration looks like on the Windows XML file? The Linux one you posted is UTF-16, I just want to check if the Windows version of the file is the same.
<?xml version="1.0" encoding="UTF-16"?>
It looks the same
<?xml version="1.0" encoding="UTF-16"?>
Thanks. One last check, on the Linux side can you retrieve the file encoding?
On mine I can do with 'file -i' to verify that the charset actually is utf-16
FYI, I've reproduced the same message on my Linux machine (RHEL 8 with BESClient 11.0.4) so... at the very least, know you're not alone. The same query on the same file works from my Windows debugger.
file -i /tmp/hw.xml
/tmp/hw.xml: text/xml; charset=utf-16le