Как получить информацию об оборудовании ПК с помощью Java или CMD

Я создаю настольное приложение Java, которое должно сообщать о производительности и статистике машины Windows (XP, Vista и W7).

Используя Java или командную строку, как мне получить следующую информацию:

  • Производитель (Dell, HP...)
  • Модальный номер
  • Тип процессора
  • Размер процессора
  • Тип системы
  • Пространство для хранения
  • Всего оперативной памяти
  • Оперативная память свободна или используется

И справочная страница для этого была бы отличной, если я найду больше информации, которую хочу перечислить.


person Dorothy    schedule 21.06.2011    source источник
comment
Я вижу много связанных вопросов на боковой панели. Вы их проходили?   -  person Vineet Reynolds    schedule 21.06.2011
comment
@VineetReynolds Я искал в Google и Stack Overflow и просмотрел несколько. Но есть пара справа, которую я не видел.   -  person Dorothy    schedule 21.06.2011


Ответы (3)


Большая часть этого должна быть доступна для запросов с помощью WMI (это то, что systeminfo в любом случае, скорее всего, использует под капотом — он просто имеет тенденцию собирать все, а не конкретную информацию).

Я взломал следующий небольшой пакетный файл. Не совсем уверен, что вы имеете в виду под Размером процессора — никакое программное обеспечение не будет входить в корпус компьютера и измерять размеры кристалла, но, возможно, это близко. Вы можете сделать set в конце командного файла, чтобы просмотреть все созданные переменные среды. Может быть, некоторые из них помогут:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "delims=" %%l in ('wmic computersystem get Manufacturer^,Model^,SystemType^,TotalPhysicalMemory /format:list') do >nul 2>&1 set "System_%%l"
for /f "delims=" %%l in ('wmic cpu get * /format:list') do >nul 2>&1 set "CPU_%%l"
for /f "delims=" %%l in ('wmic os get FreePhysicalMemory^,TotalVisibleMemorySize /format:list') do >nul 2>&1 set "OS_%%l"
set /a OS_UsedPhysicalMemory=OS_TotalVisibleMemorySize-OS_FreePhysicalMemory

for /f "delims=" %%l in ('wmic volume get DriveLetter^,FreeSpace /format:list') do (
    >nul 2>&1 set "TEMP_%%l"
    if "!TEMP_DriveLetter:~1,1!"==":" if defined TEMP_FreeSpace set StorageSpace_!TEMP_DriveLetter:~0,2!=!TEMP_FreeSpace:~0,-1!&set TEMP_DriveLetter=&set TEMP_FreeSpace=
)

echo Manufacturer: %System_Manufacturer%
echo Model: %System_Model%
echo Processor Type: %PROCESSOR_ARCHITECTURE%
echo Processor Size: %CPU_AddressWidth%
echo System Type: %System_SystemType%
echo Storage Space:
set StorageSpace_
echo RAM total: %OS_TotalVisibleMemorySize% KiB
echo RAM free: %OS_FreePhysicalMemory% KiB
echo RAM used: %OS_UsedPhysicalMemory% KiB

Примечание: это не зависит от локали, поэтому оно должно работать везде (в отличие, например, от таких вещей, как dir | find "free"). Код можно найти в моем репозитории SVN.

person Joey    schedule 22.06.2011

Производитель

systeminfo | find "System Manufacturer"

Номер модели

systeminfo | find "System Model"

Тип процессора

echo %PROCESSOR_IDENTIFIER% %PROCESSOR_LEVEL%

Размер процессора

systeminfo | find "Processor"

Тип системы

systeminfo | find "System type"

Место для хранения

dir | find "free"

OR

fsutil volume diskfree C:

Всего оперативной памяти

systeminfo | find "Total Physical Memory"

Оперативная память свободна или используется

systeminfo | find "Available Physical Memory"
person Deepak    schedule 21.06.2011
comment
Дороти: Очевидно, вы можете кэшировать вывод systeminfo, что должно немного ускорить работу. - person Joey; 22.06.2011
comment
Дипак: Многие из них зависят от локали или вообще не работают либо из-за проблем с заглавными буквами, либо из-за того, что find возвращает только одну строку, которая, например, для процессора не хватает. - person Joey; 22.06.2011
comment
вы должны использовать /FO SCV и проанализировать его в java (просто выполнить как внешний процесс) и обработать информацию. - person bestsss; 22.06.2011
comment
Это решение может быть не во всех случаях хорошим из-за интернационализации, если приложение должно работать на одном или нескольких компьютерах, которые не на английском языке. - person Vasile Bors; 27.08.2019

Будет ли psinfo от sysinternals делать то, что вы хотите? Вы можете запустить его со своего сервера для запроса каждого ПК. http://technet.microsoft.com/en-us/sysinternals/bb897550

person Wudang    schedule 21.06.2011
comment
Я бы предпочел не использовать это. Разве я не смогу использовать те же методы, что и эта программа, чтобы получить нужную мне информацию? - person Dorothy; 21.06.2011
comment
Да, очевидно, он использует API удаленного реестра support.microsoft.com/kb/315586 - person Wudang; 21.06.2011