Показать полную графическую версию : [решено] Инвентаризация
mcintosh55
01-11-2016, 12:40
Привет всем!!!!
(Get-WmiObject -Class Win32_PhysicalMemory).Memorytype
Должен выводить цифры, далее цифры приобразовываем в тип памяти согласно сайту ms, но там ни чего не написано про ddr3 или ddr4 память.
Что у меня выдает на память ddr3 - 0, по таблички MS - это "Unknown"
Есть у кого какие мысли
Фрагмент кода
$Type = "Unknown", "Other", "DRAM", "Synchronous DRAM", "Cache DRAM", "EDO", "EDRAM",
"VRAM", "SRAM", "RAM", "ROM", "Flash", "EEPROM", "FEPROM", "EPROM", "CDRAM",
"3DRAM", "SDRAM", "SGRAM", "RDRAM", "DDR-1", "DDR-2",
# ОЗУ
$b = Get-WmiObject -Class Win32_PhysicalMemory -ComputerName $computername |
Select-Object -Property @{"Name"="Комплектующие"; "expression"={"Оперативная память"}},
@{"Name"="Тип памяти"; e={$_.DeviceLocator}},
@{"Name"="Разъём"; e={$_.BankLabel}},
@{"Name"='Объем память(MB)';e={$_.Capacity / 1MB -as [int]}},
@{"Name"='Сокет'; e={$Type[($_.Memorytype)]}}
Использовать последние версии ОС(W10,W16), там обновлен этот параметр:
PS > (Get-WmiObject -Class Win32_PhysicalMemory).Memorytype
24
24 - DDR3—May not be available; see note above.
Так что отталкиваться от свойства - Speed.
Использовать последние версии ОС(W10,W16), там обновлен этот параметр: »
А чем это поможет? Опрашиваться-то будет другая ОС.
mcintosh55
01-11-2016, 15:25
Использовать последние версии ОС(W10,W16), там обновлен этот параметр: »
печально у меня W8.1 и w7
mcintosh55
01-11-2016, 18:37
а как тогда определяет aida и другие ей подобные
а как тогда определяет aida и другие ей подобные »
Как правило, они пользуют напрямую WinAPI и свои собственные регулярно обновляемые базы.
Вы можете попробовать использовать вызов, например, CPU-Z (в отличии от AIDA64 — не требующего оплаты) с параметром -txt=ФайлОтчёта, каковой разбирать впоследствии.
mcintosh55
01-11-2016, 19:47
Вы можете попробовать использовать вызов, например, CPU-Z »
в принципе как вариант, а потом PoSH обработать этот файл.
Нашел статью как вытаскивали данные из ПК по средствам winapi но как они определяли тип памяти не сказано
в принципе как вариант, а потом PoSH обработать этот файл »
Угу. Есть ещё параметр -console, т.е., в принципе, можно попробовать обойтись вовсе без промежуточного файла, но надо смотреть, как именно приложение это делает. У меня сложилось первое впечатление, что оно при этом не в поток пишет, а как бы не напрямую WriteСonsole пользует :).
mcintosh55
01-11-2016, 20:26
Ну раз городить велосипед то решено завтра все переезжают на windows 10, а то сторонии утилиты - это зло, малоли что туда программисты на программировали :-D
:) :)
mcintosh55
02-11-2016, 05:32
Нашел решение в массиве сделал вот так
$Type = "Unknown\ddr3*", "Other", "DRAM"
а внизу отчета *см. материнскую плату (благо она определятся нормально)
mcintosh55, там могут быть не только DDR3, а в принципе — любое, в том числе и просто не реализованное.
а как тогда определяет aida и другие ей подобные »
Вероятно из таблиц SPD ППЗУ модулей памяти. Средства WMI и тем более API, совершенно не пригодны для корректной полной информации о памяти..
Немного инфы здесь : http://www.ixbt.com/mainboard/spd.shtml
http://softnology.biz/tips_cpuz_bullshit2.html
а как тогда определяет aida и другие ей подобные »
Вся инфа вытягивается из крохотной микросхемы SPD EEPROM, что напаивается на печатную плату модуля памяти. Доступ к этой микросхеме для неопытного пользователя будет сложным, т.к. он осуществляется через контроллер SMBus (в процессоре либо южном мосте). Обращение к контроллеру реализуется через чтение/запись портов в/в либо через маппинг памяти. Для обоих случаев необходим драйвер. По сути нужно уметь запрограммировать контроллер согласно его документации, чтобы он сам обратился к ячейкам SPD EEPROM и считал их содержимое. На модулях DDR3 SDRAM ёмкость микросхемы составляет 256 байтов. Первая половина содержит всю важную инфу, вторая половина - профили XMP 1.x либо не содержит ничего. Дешифрация значений байтов SPD осуществляется согласно приложениям "JEDEC Annex SPD". На сайте http://softnology.biz в разделе Download они лежат в свободном доступе.
Есть ещё предложение капать в сторону DMI/SMBIOS. Это таблицы разных типов (для процессора, модулей памяти, материнской платы и т.д.), которые содержат инфу об аппартных компонентах ПК. Для работы с DMI/SMBIOS есть WinAPI-функции, вроде GetSystemFirmwareTable, однако самый простой способ получить содержимое DMI - считать ветку из реестра, которая обновляется при каждом запуске Windows:
type
TRawSMBIOSData = packed record
Used20CallingMode : Byte;
SMBIOSMajorVersion : Byte;
SMBIOSMinorVersion : Byte;
DMIRevision : Byte;
DataLength : DWORD;
SMBIOS : array [0..5120] of Byte;
end;
function ReadSMBIOSFromRegistry(var Buffer: TRawSMBIOSData): Boolean;
var
Reg : TRegistry;
dwResult : Dword;
begin
Result:=False;
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
if Reg.OpenKey('\SYSTEM\CurrentControlSet\Services\mssmbios\Data', False) then
if Reg.ValueExists('SMBiosData') then
try
dwResult:=Reg.ReadBinaryData('SMBiosData',Buffer,SizeOf(Buffer));
if dwResult <= SizeOf(Buffer) then Result:=True;
finally
Reg.Free;
end;
end;
После чего потребуется разбор и анализ данных DMI согласно документации https://www.dmtf.org/standards/smbios
vjungle, навряд ли кто-то будет копать до таких глубин.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.