Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   мониторы, нет серийника, найти другое уникальное значение. (http://forum.oszone.net/showthread.php?t=347964)

Griboed0ff 12-02-2021 09:58 2949812

мониторы, нет серийника, найти другое уникальное значение.
 
Доброго всем времени суток! При обращении к:
Код:

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

greg zakharov 15-02-2021 19:06 2950214

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

Vadikan 17-02-2021 11:24 2950425

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

Цитата:

Цитата greg zakharov
в реестр по пути HKLM\HARDWARE\DEVICEMAP\VIDEO, оттуда и забирайте информацию. »

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

greg zakharov 17-02-2021 12:52 2950433

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 2950438

Цитата:

Цитата greg zakharov
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"


Цитата:

Цитата Vadikan
взять 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_07D5_9E^C4D421C9626DCA9B0EB9B15861B1651B]
"SetId"="ACRAD14ETL1408161_22_07D5_9E"


Vadikan 17-02-2021 13:57 2950440

Цитата:

Цитата Griboed0ff
если я переставлю монитор на другой пк, то другой пк назначит для этого же монитора другой Device_InstanceId »

Угу. Но если монитор не отдает уникальных значений вроде серийного номера изначально, то их в принципе и не будет. То есть задача ваша решается инвентаризационной наклейкой на монитор и ручным внесением номера в базу.

Цитата:

Цитата greg zakharov
объясняю популярно, раз такой густой туман. »

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

Griboed0ff 17-02-2021 14:04 2950441

Цитата:

Цитата greg zakharov
значит нужно прогуляться в HKLM »

Я уже ранее прогулялся по указанным путям, но увы не смог найти нужного, возможно у вас глаз за что-либо зацепится, во вложении.

Griboed0ff 17-02-2021 14:10 2950443

Цитата:

Цитата Vadikan
То есть задача ваша решается инвентаризационной наклейкой на монитор и ручным внесением номера в базу. »

Да похоже так и будет, так как большинство фирменных наклеек уже стерты. Но была надежда, что все-таки есть какое-либо значение, которое отдает монитор. Возможно нужно еще "опустится" до драйвера и его общения с оборудованием, но это уже не powershell.

greg zakharov 17-02-2021 14:30 2950447

Цитата:

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

До одних доходит сразу, до вас что-то никак. Можете не соглашаться, но объяснять каждый чих - форума не хватит.
Цитата:

Цитата Griboed0ff
Я уже ранее прогулялся по указанным путям, но увы не смог найти нужного, возможно у вас глаз за что-либо зацепится, во вложении.

Нужно время. После отпишусь (если Vadikan в очередной раз не забанит, а то он натура ронимая).

AAT666 01-03-2021 10:26 2951512

Всем привет!

Тоже есть такая задача - инвентаризация мониторов в организации... мигрируют они каким-то странным образом с места на место )))
Ну и начал искать в сети, где-то наткнулся на дотошного автора данного скрипта.
У меня на 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 2952879

Цитата:

Цитата AAT666
Тоже есть такая задача »

как снять стандартные значения и так знаю, но проблема в том, что есть мониторы, которые не отдают данные стандартными путями, эти мониторы от производителя не имеют серийников. Хоть и видно по коду, что стандартные запросы, но на всякий случай проверил.. Не отдает и вашему скрипту. Но все равно спасибо!


Время: 22:16.

Время: 22:16.
© OSzone.net 2001-