usar que como commands comandos powershell server

powershell - que - Cim_PhysicalMemory y Win32_ComputerSystem devuelven diferente cantidad de memoria



powershell windows 10 (1)

CIM_PhysicalMemory y Win32_PhysicalMemory son lo mismo [ 1 ].

Esta propiedad se hereda de CIM_PhysicalMemory.

Aquí es donde se obtiene el valor de [ 1 ].

Este valor proviene de la estructura del Dispositivo de Memoria en la información de la versión de SMBIOS. Para las versiones 2.1 a 2.6 de SMBIOS, el valor proviene del miembro de Tamaño. Para SMBIOS versión 2.7+, el valor proviene del miembro de Tamaño extendido.

El estándar SMBIOS dice [ 2 ]

El campo Tamaño extendido está destinado a representar dispositivos de memoria de más de 32.767 MB (32 GB - 1 MB), que no se pueden describir con el campo Tamaño. Este campo solo tiene sentido si el valor en el campo Tamaño es 7FFFh. Para compatibilidad con los analizadores SMBIOS anteriores, los dispositivos de memoria de menos de (32 GB - 1 MB) deben representarse utilizando su tamaño en el campo Tamaño, dejando el campo Tamaño extendido en 0.

Como dices, tienes 8x64GB, pero muestra 8x32GB, no me gusta como un problema NUMA para mí. Si es NUMA, esperaría que se muestre 4x32GB. Además, tengo un servidor con 8x32GB y 2 sockets. Por lo tanto, si se trata de un problema NUMA, esperaría ver el mismo problema en mi caja. Sin embargo, obtengo la cantidad que se muestra correctamente. Parece que su BIOS utiliza strbach standad SMBIOS antes 2.7.1, que es extraño, ya que es de 2011.

Intente verificar su versión de SMBIOS con

(Get-CimInstance -ClassName Win32_BIOS) | Select-Object SMBIOS*

Para mí, SMBIOSVersion devuelve el número de versión del BIOS del proveedor en lugar del estándar, pero SMBIOSMajorVersion y SMBIOSMinorVersion están devolviendo el valor correcto.

Win32_ComputerSystem consulta la información de la API de Win32 [ 3 ].

Tamaño total de la memoria física. Tenga en cuenta que, en algunas circunstancias, esta propiedad puede no devolver un valor preciso para la memoria física. Por ejemplo, no es exacto si el BIOS está usando parte de la memoria física. Para un valor preciso, use la propiedad Capacity en Win32_PhysicalMemory.

Intento escribir un script de PowerShell que muestre la cantidad de memoria instalada en un servidor (un servidor físico con 512 GB).
Probé tres métodos diferentes y obtengo resultados diferentes.

  1. Win32_PhysicalMemory

    (Get-WmiObject Win32_PhysicalMemory | Measure-Object -Property Capacity -Sum).Sum)/1GB

    Esto devuelve 255.99 GB.

  2. Win32_ComputerSystem

    $InstalledRAM = Get-WmiObject -Class Win32_ComputerSystem [Math]::Round(($InstalledRAM.TotalPhysicalMemory/1GB), 2)

    Esto devuelve 511.88 GB.

  3. Cim_PhysicalMemory

    $MaxRam = 0 $RamPool = (Get-CimInstance -Class "Cim_PhysicalMemory" | % {$_.Capacity}) foreach ($RamBank in $RamPool) { $MaxRam += $RamBank/1024/1024 }

    Esto devuelve 255.99 GB.

Taskmanager / systeminfo muestra que hay 512 GB instalados.

Cuando uso Win32_PhysicalMemory para imprimir la memoria instalada en los diferentes bancos de memoria, obtengo 8 bancos de 32 GB. Pero estoy seguro de que el servidor contiene 512 GB.

¿Puede alguien explicarme por qué los métodos 1 y 3 solo devuelven 256 GB?

Actualización :
Cuando miro en la BIOS veo que hay 256 GB asignados a cada procesador físico. Mi conocimiento no es tan avanzado, pero ¿es posible que tenga que solicitar los nodos NUMA primero y que el nodo foreach recupere la cantidad de memoria asignada a él? ¿O esto no es posible con Powershell?