PDA

Показать полную графическую версию : [решено] Инвентаризация


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)]}}

Kazun
01-11-2016, 12:56
Использовать последние версии ОС(W10,W16), там обновлен этот параметр:

PS > (Get-WmiObject -Class Win32_PhysicalMemory).Memorytype
24

24 - DDR3—May not be available; see note above.

Так что отталкиваться от свойства - Speed.

Iska
01-11-2016, 14:35
Использовать последние версии ОС(W10,W16), там обновлен этот параметр: »
А чем это поможет? Опрашиваться-то будет другая ОС.

mcintosh55
01-11-2016, 15:25
Использовать последние версии ОС(W10,W16), там обновлен этот параметр: »
печально у меня W8.1 и w7

mcintosh55
01-11-2016, 18:37
а как тогда определяет aida и другие ей подобные

Iska
01-11-2016, 19:15
а как тогда определяет aida и другие ей подобные »
Как правило, они пользуют напрямую WinAPI и свои собственные регулярно обновляемые базы.

Вы можете попробовать использовать вызов, например, CPU-Z (в отличии от AIDA64 — не требующего оплаты) с параметром -txt=ФайлОтчёта, каковой разбирать впоследствии.

mcintosh55
01-11-2016, 19:47
Вы можете попробовать использовать вызов, например, CPU-Z »
в принципе как вариант, а потом PoSH обработать этот файл.

Нашел статью как вытаскивали данные из ПК по средствам winapi но как они определяли тип памяти не сказано

Iska
01-11-2016, 20:18
в принципе как вариант, а потом PoSH обработать этот файл »
Угу. Есть ещё параметр -console, т.е., в принципе, можно попробовать обойтись вовсе без промежуточного файла, но надо смотреть, как именно приложение это делает. У меня сложилось первое впечатление, что оно при этом не в поток пишет, а как бы не напрямую WriteСonsole пользует :).

mcintosh55
01-11-2016, 20:26
Ну раз городить велосипед то решено завтра все переезжают на windows 10, а то сторонии утилиты - это зло, малоли что туда программисты на программировали :-D

:) :)

mcintosh55
02-11-2016, 05:32
Нашел решение в массиве сделал вот так
$Type = "Unknown\ddr3*", "Other", "DRAM"
а внизу отчета *см. материнскую плату (благо она определятся нормально)

Iska
02-11-2016, 07:57
mcintosh55, там могут быть не только DDR3, а в принципе — любое, в том числе и просто не реализованное.

MKN
29-11-2016, 18:14
а как тогда определяет aida и другие ей подобные »
Вероятно из таблиц SPD ППЗУ модулей памяти. Средства WMI и тем более API, совершенно не пригодны для корректной полной информации о памяти..
Немного инфы здесь : http://www.ixbt.com/mainboard/spd.shtml
http://softnology.biz/tips_cpuz_bullshit2.html

vjungle
23-12-2016, 17:23
а как тогда определяет aida и другие ей подобные »
Вся инфа вытягивается из крохотной микросхемы SPD EEPROM, что напаивается на печатную плату модуля памяти. Доступ к этой микросхеме для неопытного пользователя будет сложным, т.к. он осуществляется через контроллер SMBus (в процессоре либо южном мосте). Обращение к контроллеру реализуется через чтение/запись портов в/в либо через маппинг памяти. Для обоих случаев необходим драйвер. По сути нужно уметь запрограммировать контроллер согласно его документации, чтобы он сам обратился к ячейкам SPD EEPROM и считал их содержимое. На модулях DDR3 SDRAM ёмкость микросхемы составляет 256 байтов. Первая половина содержит всю важную инфу, вторая половина - профили XMP 1.x либо не содержит ничего. Дешифрация значений байтов SPD осуществляется согласно приложениям "JEDEC Annex SPD". На сайте http://softnology.biz в разделе Download они лежат в свободном доступе.

vjungle
23-12-2016, 17:38
Есть ещё предложение капать в сторону 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

Iska
23-12-2016, 19:10
vjungle, навряд ли кто-то будет копать до таких глубин.




© OSzone.net 2001-2012