powershell列出Ram信息

时间:2017-04-11 13:30:59

标签: powershell server 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要买什么并放入,而不必长途跋涉找出我的错误类型

2 个答案:

答案 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_PhyicalMemoryArrayCIM_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属性来手动查找它。经过几次迭代后,您应该能够收集数据并编写自己的异常,并完成此任务。