I think the MIB/OID you are looking for is described here --> http://tools.cisco.com/Support/SNMP/do/BrowseOID.do?local=en&translate=Translate&objectInput=18.104.22.168.22.214.171.124.126.96.36.199.3
I checked this on a 3750 stack that we have here and 188.8.131.52.184.108.40.206.220.127.116.11.3.1 and 18.104.22.168.22.214.171.124.126.96.36.199.3.2 were the serials for each switch. I would assume that as more switches were added the last number would increase (188.8.131.52.184.108.40.206.220.127.116.11.3.?)
Hopefully this either points in you the right direction or helps you out. As for NCM solutions I am not sure, but once you use UnDP you can creat an Orion report from that and get the inventory you are looking for.
Based on an snmpwalk of a 3750 stack, it appears that:
SNMPv2-SMI::mib-18.104.22.168.22.214.171.1241 <--- first stack member serial #
SNMPv2-SMI::mib-126.96.36.199.188.8.131.521 <--- second stack member serial #
ois-cjones-mac:~ cjones$ snmpget -v2c -c public 10.0.0.1 SNMPv2-SMI::mib-184.108.40.206.220.127.116.111 SNMPv2-SMI::mib-18.104.22.168.22.214.171.1241 = STRING: "CAT1234ABCD" ois-cjones-mac:~ cjones$ snmpget -v2c -c public 10.0.0.2 SNMPv2-SMI::mib-126.96.36.199.188.8.131.521 SNMPv2-SMI::mib-184.108.40.206.220.127.116.111 = STRING: "CAT5678EFGH"
Hope that helps!
We are in the process of doing the same thing for our SmartNet agreement. I used the Entity MIB that was mentioned above in the UnDP then created an Advanced SQL report to pull out the data. We only have a couple of stacked switches so I wasn't too worried about them but the report is working well. We've limited it to certain RowID's from the result (1 and 1001.) You could adapt it to list what is needed for the stacked switches.
Here's the SQL...
N1.City AS City, N1.Caption AS NodeName, N1.NodeID, N1.IP_Address AS IP_Address, N1.MachineType AS Machine_Type,
WHEN (Select CPS.Status from CustomPollerStatus CPS where CPA.CustomPollerAssignmentID = CPS.CustomPollerAssignmentID and CPS.RowID = '1001') is null
THEN (Select CPS.Status from CustomPollerStatus CPS where CPA.CustomPollerAssignmentID = CPS.CustomPollerAssignmentID and CPS.RowID = '1')
ELSE (Select CPS.Status from CustomPollerStatus CPS where CPA.CustomPollerAssignmentID = CPS.CustomPollerAssignmentID and CPS.RowID = '1001')
END AS Status
Nodes N1, CustomPollerAssignment CPA
(N1.Vendor = 'Cisco' and N1.NodeID = CPA.NodeID and CPA.AssignmentName like '%entphysicalserialnum%')
ORDER BY 1 ASC, 2 ASC
This was done in a hurry to get a report for someone. We're missing a few devices (37xx Stacks, Chassis Switches, etc.) It also doesn't work with older devices. Our 26xx routers and 2924 switches aren't working. (They don't support the entity MIB.)