我试图找出计算机中的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要买什么并放入,而不必长途跋涉找出我的错误类型
答案 0 :(得分:1)
Win32_PhysicalMemory class documentation包含将$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)"]}}
值转换为内存模块类型的引用。将其转换为哈希表以便于访问:
match
答案 1 :(得分:0)
您可以使用WMI类CIM_PhyicalMemoryArray
和CIM_MemoryDeviceLocation
查看哪些内存设备位于哪些插槽中。我已经使用过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属性来手动查找它。经过几次迭代后,您应该能够收集数据并编写自己的异常,并完成此任务。