我正在尝试编写一个PowerShell脚本,显示服务器(512 GB的物理服务器)中安装的内存量.
我尝试了三种不同的方法,但得到了不同的结果.
(Get-WmiObject Win32_PhysicalMemory | Measure-Object -Property Capacity -Sum).Sum)/1GB
Run Code Online (Sandbox Code Playgroud)
返回255.99 GB.
$InstalledRAM = Get-WmiObject -Class Win32_ComputerSystem
[Math]::Round(($InstalledRAM.TotalPhysicalMemory/1GB), 2)
Run Code Online (Sandbox Code Playgroud)
这将返回511.88 GB.
$MaxRam = 0
$RamPool = (Get-CimInstance -Class "Cim_PhysicalMemory" | % {$_.Capacity})
foreach ($RamBank in $RamPool) {
$MaxRam += $RamBank/1024/1024
}
Run Code Online (Sandbox Code Playgroud)
返回255.99 GB.
Taskmanager/systeminfo显示安装了512 GB.
当我Win32_PhysicalMemory用来打印安装在不同内存库中的内存时,我得到8个32 GB的库.但我确定服务器包含512 GB.
有人可以向我解释为什么方法1和3只返回256 GB?
更新:
当我查看BIOS时,我看到每个物理处理器分配了256 GB.我的知识不是那么先进但我是否有可能首先请求NUMA节点并且foreach节点检索分配给它的内存量?或者Powershell不可能做到这一点?