There are a few articles about this here on Codeproject:
The best one I found is this (C++)
Get Physical HDD Serial Number without WMI[
^]
Or this one using C#
How to Retrieve the REAL Hard Drive Serial Number[
^]
This will give you a list of physical disks and some properties about each one.
And heres a simple script using WMI:
var searcher = new ManagementObjectSearcher(@"select * from Win32_DiskDrive");
foreach (ManagementObject obj in searcher.Get())
{
Console.WriteLine("Name:{0}", obj["Name"]);
Console.WriteLine("Size:{0}", obj["Size"]);
}