Войти

Показать полную графическую версию : мониторы, нет серийника, найти другое уникальное значение.


Griboed0ff
12-02-2021, 09:58
Доброго всем времени суток! При обращении к:gwmi wmimonitorid -Namespace root\wmiбольшинство мониторов имеет: производителя, модель, серийник, но есть процент мониторов, у которых пустые значения: ManufacturerName, UserFriendlyName, SerialNumberID, или они имеют не уникальные значения. Вопрос, возможно ли как-то запросить у монитора все имеющиеся у него значения, чтобы найти мб гуид какой-либо, в общем уникальное значение, по которому можно будет идентифицировать монитор? Видел можно выдернуть из SCOM модуль для powershell и возможно там, что-то найти про монитор, но пока не совсем понял про то ли там речь. Возможно кто-то уже сталкивался с задачей поиска любого идентификатора оборудования, не важно серийний он или нет.

greg zakharov
15-02-2021, 19:06
Вам лучше "спуститься" на уровень объектов Windows, конкретнее - \Device. Собственно, туда монтируются видеоустройства: \Device\Video0, \Device\Video1 ... \Device\VideoX. Сведения о точках монтирования помещаются в реестр по пути HKLM\HARDWARE\DEVICEMAP\VIDEO, оттуда и забирайте информацию.

Vadikan
17-02-2021, 11:24
Griboed0ff, я бы попробовал взять InstanceID из диспетчера устройств.

В Windows 10 20H1+ - pnputil /enum-devices.
В более ранних версиях Windows - devcon https://t.me/sterkin_ru/658 | https://vk.com/@sterkin_ru-devcon

pnputil /enum-devices /connected /class monitor
Microsoft PnP Utility

Instance ID: DISPLAY\DELA07B\5&134b4fb&2&UID4356
Device Description: Dell U2412M(DisplayPort)
Class Name: Monitor
Class GUID: {4d36e96e-e325-11ce-bfc1-08002be10318}
Manufacturer Name: Dell Inc.
Status: Started
Driver Name: oem38.inf

Instance ID: DISPLAY\PHL08EB\5&134b4fb&2&UID4864
Device Description: Generic PnP Monitor
Class Name: Monitor
Class GUID: {4d36e96e-e325-11ce-bfc1-08002be10318}
Manufacturer Name: (Standard monitor types)
Status: Started
Driver Name: monitor.inf

в реестр по пути HKLM\HARDWARE\DEVICEMAP\VIDEO, оттуда и забирайте информацию. »
Смотрю по указанному пути https://i.imgur.com/0S0qOwB.png и не вижу ничего удобного, за что можно зацепиться

greg zakharov
17-02-2021, 12:52
Vadikan, объясняю популярно, раз такой густой туман. Колонка слева - точки монтирования, справа - значения в реестре, куда нужно прогуляться далее по реестру. Например, устройство \Device\VideoX указывает на \Registry\Machine\System\CurrentControlSet\Control\Video\{GUID}\XXXX, значит нужно прогуляться в HKLM\SYSTEM\CurrentControlSet\Control\Video\{GUID}\XXXX. Всё это "безобразие" формируется системой при каждом старте (не путать со входом пользователя). К слову, pnputil по указанным разделам реестра и берет значения.

Griboed0ff
17-02-2021, 13:35
HKLM\HARDWARE\DEVICEMAP\VIDEO »
тут нужной информации не найдено:
[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\VIDEO]
"\\Device\\Video0"="\\Registry\\Machine\\System\\CurrentControlSet\\Control\\Video\\{10C3C197-EA6D-11E5-9BE5-A0D3C14612A1}\\0000"
"MaxObjectNumber"=dword:00000003
"ObjectNumberList"=hex:00,00,00,00,01,00,00,00,02,00,00,00,03,00,00,00
"\\Device\\Video1"="\\Registry\\Machine\\System\\CurrentControlSet\\Control\\Video\\{3BD9A71D-24D9-47AB-9BF9-CF71FC7B3328}\\0000"
"\\Device\\Video2"="\\Registry\\Machine\\System\\CurrentControlSet\\Control\\Video\\{3BD9A71D-24D9-47AB-9BF9-CF71FC7B3328}\\0001"
"\\Device\\Video3"="\\REGISTRY\\MACHINE\\SYSTEM\\ControlSet001\\Services\\BasicDisplay"
"\\Device\\Disc"="\\REGISTRY\\Machine\\System\\CurrentControlSet\\Services\\TSDDD\\Device0"
взять InstanceID »
Device_InstanceId по определению назначаемый ID, то есть если я переставлю монитор на другой пк, то другой пк назначит для этого же монитора другой Device_InstanceId. Я конечно еще проверю на практике.
Вот, что есть про мой монитор:PS C:\WINDOWS\system32> Get-PnpDeviceProperty -InstanceId 'DISPLAY\ACRAD14\4&1CC31B9&0&UID65793'

InstanceId KeyName Type Data
---------- ------- ---- ----
DISPLAY... DEVPKEY_Device_DeviceDesc String Универсальный монитор PnP
DISPLAY... DEVPKEY_Device_HardwareIds StringList {MONITOR\ACRAD14}
DISPLAY... DEVPKEY_Device_CompatibleIds StringList {*PNP09FF}
DISPLAY... DEVPKEY_Device_Service String monitor
DISPLAY... DEVPKEY_Device_Class String Monitor
DISPLAY... DEVPKEY_Device_ClassGuid Guid {4D36E96E-E325-11CE-BFC1-08002BE10318}
DISPLAY... DEVPKEY_Device_Driver String {4d36e96e-e325-11ce-bfc1-08002be10318}\0062
DISPLAY... DEVPKEY_Device_ConfigFlags UInt32 0
DISPLAY... DEVPKEY_Device_Manufacturer String (Стандартные мониторы)
DISPLAY... DEVPKEY_Device_PDOName String \Device\00000093
DISPLAY... DEVPKEY_Device_Capabilities UInt32 228
DISPLAY... DEVPKEY_Device_BusTypeGuid Guid {C6CA0D74-E43B-4ABD-A63A-4BD2AD319D60}
DISPLAY... DEVPKEY_Device_LegacyBusType UInt32 15
DISPLAY... DEVPKEY_Device_BusNumber UInt32 0
DISPLAY... DEVPKEY_Device_EnumeratorName String DISPLAY
DISPLAY... DEVPKEY_Device_Address UInt32 65793
DISPLAY... DEVPKEY_Device_PowerData Binary {56, 0, 0, 0...}
DISPLAY... DEVPKEY_Device_RemovalPolicy UInt32 2
DISPLAY... DEVPKEY_Device_RemovalPolicyDefault UInt32 2
DISPLAY... DEVPKEY_Device_InstallState UInt32 0
DISPLAY... DEVPKEY_Device_BaseContainerId Guid {2619191B-7090-11EB-9C81-A0D3C14D512D}
DISPLAY... DEVPKEY_NAME String Универсальный монитор PnP
DISPLAY... DEVPKEY_Device_InstanceId String DISPLAY\ACRAD14\4&1CC31B9&0&UID65793
DISPLAY... DEVPKEY_Device_DevNodeStatus UInt32 25190410
DISPLAY... DEVPKEY_Device_ProblemCode UInt32 0
DISPLAY... DEVPKEY_Device_Parent String PCI\VEN_8086&DEV_0412&SUBSYS_198E103C&REV_06\3&11583659&...
DISPLAY... DEVPKEY_Device_SafeRemovalRequired Boolean False
DISPLAY... DEVPKEY_Device_ContainerId Guid {2619191B-7090-11EB-9C81-A0D3C14D512D}
DISPLAY... DEVPKEY_Device_IsPresent Boolean True
DISPLAY... DEVPKEY_Device_HasProblem Boolean False
DISPLAY... {83DA6326-97A6-4088-9453-A1923F573B29} 15 Boolean True
DISPLAY... DEVPKEY_Device_IsRebootRequired Boolean False
DISPLAY... DEVPKEY_Device_ReportedDeviceIdsHash UInt32 2917783173
DISPLAY... DEVPKEY_Device_InLocalMachineContainer Boolean False
DISPLAY... DEVPKEY_Device_Stack StringList {\Driver\monitor, \Driver\igfx}
DISPLAY... {3464F7A4-2444-40B1-980A-E0903CB6D912} 10 UInt32 2
DISPLAY... {3464F7A4-2444-40B1-980A-E0903CB6D912} 14 UInt32 2
DISPLAY... DEVPKEY_Device_BusReportedDeviceDesc String Generic Monitor
DISPLAY... DEVPKEY_Device_ConfigurationId String monitor.inf:*PNP09FF,PnPMonitor.Install
DISPLAY... {80497100-8C73-48B9-AAD9-CE387E19C56E} 6 UInt32 1
DISPLAY... {83DA6326-97A6-4088-9453-A1923F573B29} 3 String monitor.inf:91d2a0f3f5cc9ebd:PnPMonitor.Install:10.0.105...
DISPLAY... {83DA6326-97A6-4088-9453-A1923F573B29} 10 String PCI\VEN_8086&DEV_0412&SUBSYS_198E103C&REV_06\3&11583659&...
DISPLAY... DEVPKEY_Device_InstallDate FileTime 17.02.2021 10:33:27
DISPLAY... DEVPKEY_Device_FirstInstallDate FileTime 17.02.2021 10:33:27
DISPLAY... DEVPKEY_Device_LastArrivalDate FileTime 17.02.2021 10:33:27
DISPLAY... DEVPKEY_Device_DriverDate FileTime 21.06.2006 6:00:00
DISPLAY... DEVPKEY_Device_DriverVersion String 10.0.10586.0
DISPLAY... DEVPKEY_Device_DriverDesc String Generic PnP Monitor
DISPLAY... DEVPKEY_Device_DriverInfPath String monitor.inf
DISPLAY... DEVPKEY_Device_DriverInfSection String PnPMonitor.Install
DISPLAY... DEVPKEY_Device_MatchingDeviceId String *PNP09FF
DISPLAY... DEVPKEY_Device_DriverProvider String Microsoft
DISPLAY... DEVPKEY_Device_DriverRank UInt32 16719872
так же в реестре найдены такие значения в названиях, непонятно пока уникальны ли они или такие же назначаемые виндой [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\GraphicsDrivers\Configuration\ACRAD14ETL1408161_22_0 7D5_9E^C4D421C9626DCA9B0EB9B15861B1651B]
"SetId"="ACRAD14ETL1408161_22_07D5_9E"

Vadikan
17-02-2021, 13:57
если я переставлю монитор на другой пк, то другой пк назначит для этого же монитора другой Device_InstanceId »
Угу. Но если монитор не отдает уникальных значений вроде серийного номера изначально, то их в принципе и не будет. То есть задача ваша решается инвентаризационной наклейкой на монитор и ручным внесением номера в базу.

объясняю популярно, раз такой густой туман. »
Модераториал: сразу объясняйте популярно и не рефлексируйте, когда комментируют ваши посты.

Griboed0ff
17-02-2021, 14:04
значит нужно прогуляться в HKLM »
Я уже ранее прогулялся по указанным путям, но увы не смог найти нужного, возможно у вас глаз за что-либо зацепится, во вложении.

Griboed0ff
17-02-2021, 14:10
То есть задача ваша решается инвентаризационной наклейкой на монитор и ручным внесением номера в базу. » Да похоже так и будет, так как большинство фирменных наклеек уже стерты. Но была надежда, что все-таки есть какое-либо значение, которое отдает монитор. Возможно нужно еще "опустится" до драйвера и его общения с оборудованием, но это уже не powershell.

greg zakharov
17-02-2021, 14:30
сразу объясняйте популярно и не рефлексируйте, когда комментируют ваши посты.До одних доходит сразу, до вас что-то никак. Можете не соглашаться, но объяснять каждый чих - форума не хватит.
Я уже ранее прогулялся по указанным путям, но увы не смог найти нужного, возможно у вас глаз за что-либо зацепится, во вложении.Нужно время. После отпишусь (если Vadikan в очередной раз не забанит, а то он натура ронимая).

AAT666
01-03-2021, 10:26
Всем привет!

Тоже есть такая задача - инвентаризация мониторов в организации... мигрируют они каким-то странным образом с места на место )))
Ну и начал искать в сети, где-то наткнулся на дотошного автора данного скрипта.
У меня на 2000+ мест отрабатывает полностью (кроме, дисплейных панелей - но и там серийник выводит, остальное ерунда какая-то)
По двум мониторам тоже показывает.

Удачи!


function Get-LittleEndianInt($array, $index) {
$temp = @(0) * 4
[Array]::Copy($array, $index, $temp, 0, 4)
[Array]::Reverse($temp)
[System.BitConverter]::ToInt32($temp, 0)
}


# -------------- try get monitor info ---------------------------------------------------------------------------------------------------------------------------
$monitorInfo = @()
gwmi Win32_PnPEntity -Filter "Service='monitor'" | % {
$mi = @{}
$mi.Caption = $_.Caption
$mi.DeviceID = $_.DeviceID
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', '')
$RegKey = $Reg.OpenSubKey("SYSTEM\CurrentControlSet\Enum\"+$_.DeviceID + "\Device Parameters")
$edid = $RegKey.GetValue("EDID")

if($edid -ne $null)
{
$mi.Manufacturer += [char](64 + [Int32]($edid[8] / 4))
$mi.Manufacturer += [char](64 + [Int32]($edid[8] % 4) * 8 + [Int32]($edid[9] / 32))
$mi.Manufacturer += [char](64 + [Int32]($edid[9] % 32))
$mi.ManufacturingWeek = $edid[16]
$mi.ManufacturingYear = $edid[17] + 1990
$mi.HorizontalSize = $edid[21]
$mi.VerticalSize = $edid[22]
$mi.DiagonalSize = [Math]::Round([Math]::Sqrt($mi.HorizontalSize*$mi.HorizontalSize + $mi.VerticalSize*$mi.VerticalSize) / 2.54)

for($i=54;$i-lt109;$i+=18)
{
if((Get-LittleEndianInt $edid $i) -eq 0xff) { for($j = $i+5; $edid[$j] -ne 10 -and $j -lt $i+18; $j++) { $mi.SerialNumber += [char]$edid[$j] } }
if((Get-LittleEndianInt $edid $i) -eq 0xfc) { for($j = $i+5; $edid[$j] -ne 10 -and $j -lt $i+18; $j++) { $mi.Name += [char]$edid[$j] } }
}

$monitorInfo = $mi
}
}
# -----------------------------------------------------------------------------------------------------------------------------------------------------------

$monitorInfo

Griboed0ff
16-03-2021, 18:42
Тоже есть такая задача » как снять стандартные значения и так знаю, но проблема в том, что есть мониторы, которые не отдают данные стандартными путями, эти мониторы от производителя не имеют серийников. Хоть и видно по коду, что стандартные запросы, но на всякий случай проверил.. Не отдает и вашему скрипту. Но все равно спасибо!




© OSzone.net 2001-2012