繁体   English   中英

powershell列出Ram信息

[英]powershell listing Ram information

我试图找出计算机中的RAM类型。 我想知道这些模块是UDIMM,RDIMM,LRDIMM还是任何其他类型。 这将非常有用,因此我可以计划将哪些模块插入数据中心的哪些服务器。

这是我到目前为止的内容:

Get-WmiObject Win32_PhysicalMemory |
        Select-Object PSComputerName, DeviceLocator, Manufacturer, PartNumber, 
        @{ label = "Size/GB"; expression = { $_.Capacity / 1GB } },
        Speed, Datawidth, TotalWidth |
        Format-Table -AutoSize

这是有用的信息,但是我想告诉我一列类型(UDIMM,RDIMM,LRDIMM)以及列出空的DIMM的方法,因为这样可以更容易地查看什么DIMM已满/空(但这不是一个大问题)。

这不是重复的,因为我正在寻找存储在服务器上的Ram的类型,所以我知道要购买和放入什么Ram而不用花很长的路要找出我错了类型

Win32_PhysicalMemory类文档包含用于将MemoryType值转换为内存模块类型的参考。 将其转换为哈希表以便于访问:

$MemoryTypeMap = @{
    "0" = 'Unknown'
    "1" = 'Other'
    "2" = 'DRAM'
    "3" = 'Synchronous DRAM'
    "4" = 'Cache DRAM'
    "5" = 'EDO'
    "6" = 'EDRAM'
    "7" = 'VRAM'
    "8" = 'SRAM'
    "9" = 'RAM'
    "10" = 'ROM'
    "11" = 'Flash'
    "12" = 'EEPROM'
    "13" = 'FEPROM'
    "14" = 'EPROM'
    "15" = 'CDRAM'
    "16" = '3DRAM'
    "17" = 'SDRAM'
    "18" = 'SGRAM'
    "19" = 'RDRAM'
    "20" = 'DDR'
    "21" = 'DDR2'
    "22" = 'DDR2 FB-DIMM'
    "24" = 'DDR3'
    "25" = 'FBD2'
}

Get-WmiObject Win32_PhysicalMemory |Select @{Label = 'Type';Expression = {$MemoryTypeMap["$($_.MemoryType)"]}}

您可以使用CIM_PhyicalMemoryArrayCIM_MemoryDeviceLocation的WMI类查看哪些存储设备位于哪些插槽中。 我使用了WBEMTest和Get-CimInstance ,但是Windows似乎没有报告主板上哪个内存插槽已打开。

我最好的猜测? 您将需要使用Win32_Baseboard类来报告主板的型号,并手动进行一些工作以查看每个型号有多少个插槽。 然后,您可以使用CIM_MemoryDeviceLocation的数据来确定打开了多少个插槽。

这样做的方法可能看起来像这样。

$memorySlots = Get-CimInstance Win32_MemoryDeviceLocation
$motherBoard = Get-CimInstance win32_baseboard

switch ($motherBoard.Product){
    #find the motherboard models for the most common models and populate manually w/ count of ram slots 
    "0TM99H" {$Totalslots = 2}
    Default {$Totalslots = 4}
}

 Get-WmiObject Win32_PhysicalMemory |
        Select-Object PSComputerName, DeviceLocator, Manufacturer, PartNumber, 
        @{ label = "Size/GB"; expression = { $_.Capacity / 1GB } },
        Speed, Datawidth, TotalWidth, @{ label ="FreeSlots";exp={$Totalslots-$memorySlots.Count}}

它看起来像这样:

PSComputerName : SLVER
DeviceLocator  : DIMM A
Manufacturer   : Elpida
PartNumber     : 8KTS51264HDZ-1G6E1
Size/GB        : 4
Speed          : 1600
Datawidth      : 64
TotalWidth     : 64
FreeSlots      : 0

PSComputerName : SLVER
DeviceLocator  : DIMM B
Manufacturer   : Elpida
PartNumber     : 8KTS51264HDZ-1G6E1
Size/GB        : 4
Speed          : 1600
Datawidth      : 64
TotalWidth     : 64
FreeSlots      : 0

最后,您询问了有关内存类型的信息,从WMI的角度来看,这似乎也不是我们所了解的信息。 或者更确切地说,如果WMI确实知道它,那么我在任何地方都找不到它。

我认为您也需要在那里做一些手动工作,收集内存部件号,然后手动研究以确定它是哪种类型的RAM,最后通过添加另一个Switch语句将该信息添加到输出中,如图所示。

switch ($memorySpecs.PartNumber){
    "8KTS51264HDZ-1G6E1" {$RAMType='SoDimm'}
    Default {$RAMType="Unknown, research $($memorySpecs.PartNumber)"}
}

更新资料

如果该PC上的BIOS将其报告给Windows,Mathias提供了一种绝佳的RAM查找方法。 我已经在一些系统上进行了测试,有些报告其RAM类型,而另一些则没有。 对于那些没有的东西,您可以参考上面我演示过的partNumber属性来手动查找它。 经过几次迭代后,您应该能够收集数据并编写自己的异常,并完成此任务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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