列出 Ram 信息的电源外壳



我试图找出计算机中的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)"}
}

更新

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

最新更新