首页 > 解决方案 > WMIC 命令未显示正确的值?

问题描述

我们使用一种产品向我们的平台报告 RAM 和 CPU 等审计信息。

但是,当涉及到 RAM 时,我们得到了不同寻常的结果。

产品使用命令:wmic computersystem get totalphysicalmemory

输出值为 2.3GB RAM

但是它安装了4GB。我们使用这些信息为我们的客户创建路线图,因此需要准确。知道为什么吗?

标签: batch-fileramauditwmic

解决方案


wmic memorychip get capacity

来源:如何使用 Windows cmd 获取总物理内存

使用 Hybrid [batch-Vbscript] 文件,您可以执行以下操作:

@echo off
Mode 55,10 & color 0A
Title TotalPhysicalMemory ^& Memorychip Capacity
Set "WMIC_TOTMEM=wmic ComputerSystem get TotalPhysicalMemory /format:Value"
Set "WMIC_Capacity=wmic memorychip get capacity /format:Value"
Set "CAP=Capacity"
Set "TOT=TotalPhysicalMemory"
Call :GetTOTMEM %TOT% TotalPhysicalMemory
Call :GetCapacityMem %CAP% Capacity
echo(
Call :Convert %TotalPhysicalMemory% TotalPhysicalMemory_Converted
Call :Convert %Capacity% Capacity_Converted
echo   -------------------------------------------------
echo     TotalPhysicalMemory = %TotalPhysicalMemory%
echo     Memorychip Capacity = %Capacity%
echo   -------------------Converted---------------------
echo     TotalPhysicalMemory = %TotalPhysicalMemory_Converted%
echo     Memorychip Capacity = %Capacity_Converted% 
echo   -------------------------------------------------
pause>nul & Exit
::-------------------------------------------------------
:GetCapacityMem
FOR /F "tokens=2 delims==" %%I IN (
  '%WMIC_Capacity% ^| find /I "%~1" 2^>^nul'
) DO FOR /F "delims=" %%A IN ("%%I") DO SET "%2=%%A"
Exit /b
::-------------------------------------------------------
:GetTOTMEM
FOR /F "tokens=2 delims==" %%I IN (
  '%WMIC_TOTMEM% ^| find /I "%~1" 2^>^nul'
) DO FOR /F "delims=" %%A IN ("%%I") DO SET "%2=%%A"
Exit /b
::-------------------------------------------------------
:Convert
Set "VBS=%Temp%\%Random%.vbs"
(
    echo wscript.echo Convert("%~1"^)
    echo 'Function to format a number into typical size scales
    echo Function Convert(iSize^)
    echo    aLabel = Array("bytes", "KB", "MB", "GB", "TB"^)
    echo    For i = 0 to 4
    echo        If iSize ^> 1024 Then
    echo            iSize = iSize / 1024
    echo        Else
    echo            Exit For
    echo        End If
    echo    Next
    echo    Convert = Round(iSize,2^) ^& " " ^& aLabel(i^)
    echo End Function
)>"%VBS%"
for /f "delims=" %%a in ('Cscript //NoLogo "%VBS%"') do ( set "%2=%%a" )
Del "%VBS%"
Exit /b
::-------------------------------------------------------

推荐阅读