[英]Get RAM Manufacturer & PartNumber
就像在这个问题Get Manufacturer name for my RAM (WMI didn't get this information)中一样,我需要获取制造商和零件号。
以下解决方案不起作用:
Get-WmiObject -class Win32_PhysicalMemory | Format-Table Manufacturer, PartNumber
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMemory"))
{
using (ManagementObjectCollection data = searcher.Get())
{
foreach (ManagementObject obj in data)
{
string manufacturer = obj.GetPropertyValue("Manufacturer")?.ToString().Trim();
string memType = MemoryType(Convert.ToInt32(obj.GetPropertyValue("MemoryType")));
string part = obj.GetPropertyValue("PartNumber").ToString().Trim();
string size = obj.GetPropertyValue("Capacity").ToString();
}
}
}
在这两种解决方案中,制造商和零件号都是空的。 另一方面,使用 Aida64,ram 的完整信息确实会出来。
Windows 10 企业 LTSC v10.0 (17763)
三星 DDR3 99U5403-002.A00LF 2GB
Powershell WMIC Memorychip
命令实际上确实有制造商和序列号,但是它是加密数据。
从CMD
或PowerShell
Window:
wmic memorychip get manufacturer
, wmic memorychip get serialnumber
这些是相关的PowerShell WMIC
命令,其中GET
后缀从特定 header 检索特定数据。
WMIC MEMCACHE
, WMIC MEMORYCHIP
, WMIC MEMPHYSICAL
我很好奇是否有人也知道如何将 ID 转换为公司名称! 希望这有帮助!
下面显示如何使用 WMI 检索 memory 和操作系统信息。
创建一个 class(名称:助手)
//Add reference:
//Project => Add Reference => Assemblies => System.Management
//add using statement: using System.Management;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Management;
using System.Diagnostics;
namespace GetSystemInfo
{
public class Helper
{
public static string GetSystemInfo()
{
StringBuilder sb = new StringBuilder();
sb.AppendFormat("{0}{1}", GetOSInfo(), System.Environment.NewLine);
sb.AppendFormat("{0}{1}", GetMemoryInfo(), System.Environment.NewLine);
return sb.ToString();
}
public static string GetOSInfo()
{
StringBuilder sb = new StringBuilder();
using (var searcher = new ManagementObjectSearcher("SELECT * FROM WIN32_OperatingSystem"))
{
using (ManagementObjectCollection mObjCollection = searcher.Get())
{
foreach (ManagementBaseObject mbObj in mObjCollection)
{
//if null, go to next iteration
if (mbObj == null)
continue;
string caption = mbObj.GetPropertyValue("Caption")?.ToString().Trim();
string version = mbObj.GetPropertyValue("version").ToString().Trim();
string versionMinor = version.Contains(".") ? version.Substring(version.LastIndexOf(".") + 1) : string.Empty;
string versionMajor = version.Contains(".") ? version.Substring(0, version.LastIndexOf(".")) : string.Empty;
sb.AppendFormat("{0}", caption);
if (!String.IsNullOrEmpty(versionMajor))
sb.AppendFormat(" v {0}", versionMajor);
if (!String.IsNullOrEmpty(versionMinor))
sb.AppendFormat(" ({0})", versionMinor);
sb.AppendFormat("{0}", System.Environment.NewLine);
}
}
return sb.ToString();
}
}
public static string GetMemoryInfo()
{
StringBuilder sb = new StringBuilder();
using (var searcher = new ManagementObjectSearcher("SELECT * FROM WIN32_PhysicalMemory"))
{
using (ManagementObjectCollection mObjCollection = searcher.Get())
{
foreach (ManagementBaseObject mbObj in mObjCollection)
{
//if null, go to next iteration
if (mbObj == null)
continue;
string manufacturer = mbObj.GetPropertyValue("Manufacturer")?.ToString().Trim();
string memType = MemoryType(Convert.ToInt32(mbObj.GetPropertyValue("MemoryType")));
string part = mbObj.GetPropertyValue("PartNumber").ToString().Trim();
string size = MemorySize(Convert.ToDouble(mbObj.GetPropertyValue("Capacity")));
sb.AppendFormat("{0} {1} {2} {3}{4}", manufacturer, memType, part, size, System.Environment.NewLine);
}
}
return sb.ToString();
}
}
private static string MemorySize(double memSize)
{
string result = String.Format("{0} bytes", memSize.ToString());
double sizeInTB = memSize / 1024.0 / 1024.0 / 1024.0 / 1024.0;
double sizeInGB = memSize / 1024.0 / 1024.0 / 1024.0;
double sizeInMB = memSize / 1024.0 / 1024.0;
double sizeInKB = memSize / 1024.0;
Debug.WriteLine("sizeInTB: " + sizeInTB);
Debug.WriteLine("sizeInGB: " + sizeInGB);
Debug.WriteLine("sizeInMB: " + sizeInMB);
if (sizeInTB > 1.0)
return String.Format("{0} TB", sizeInTB);
else if (sizeInGB > 1.0)
return String.Format("{0} GB", sizeInGB);
else if (sizeInMB > 1.0)
return String.Format("{0} GB", sizeInMB);
else if (sizeInKB > 1.0)
return String.Format("{0} KB", sizeInGB);
return result;
}
private static string MemoryType(int memType)
{
string result = string.Empty;
switch (memType)
{
case 0:
return "Unknown";
case 1:
return "Other";
case 2:
return "DRAM";
case 3:
return "Synchronous DRAM";
case 4:
return "Cache DRAM";
case 5:
return "EDO";
case 6:
return "EDRAM";
case 7:
return "VRAM";
case 8:
return "SRAM";
case 9:
return "RAM";
case 10:
return "ROM";
case 11:
return "Flash";
case 12:
return "EEPROM";
case 13:
return "FEPROM";
case 14:
return "EPROM";
case 15:
return "CDRAM";
case 16:
return "3DRAM";
case 17:
return "SDRAM";
case 18:
return "SGRAM";
case 19:
return "RDRAM";
case 20:
return "DDR";
case 21:
return "DDR2";
case 22:
return "DDR2 FB-DIMM";
case 24:
return "DDR3";
case 26:
return "DDR4";
default:
return "not specified";
}
}
}
}
用法:
string output = Helper.GetSystemInfo();
资源:
您可以使用以下代码查找系统的物理 Memory 的制造商和部件号:
using System;
using System.Management;
namespace GetRAM
{
class Program
{
static void Main(string[] args)
{
ManagementScope oMs = new ManagementScope();
ObjectQuery oQuery = new ObjectQuery("SELECT * FROM Win32_PhysicalMemory");
ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oMs, oQuery);
ManagementObjectCollection oCollection = oSearcher.Get();
foreach (ManagementObject obj in oCollection)
{
Console.WriteLine($"Manufacturer: {obj["Manufacturer"]} | Part Number: {obj["PartNumber"]}");
}
}
}
}
您还可以在命令提示符中使用以下命令来获取详细信息:
wmic MEMORYCHIP get Manufacturer, PartNumber
结果:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.