繁体   English   中英

获取 RAM 制造商和零件号

[英]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命令实际上确实有制造商和序列号,但是它是加密数据。

CMDPowerShell Window:

wmic memorychip get manufacturerwmic 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM