Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - мониторы, нет серийника, найти другое уникальное значение.

Ответить
Настройки темы
PowerShell - мониторы, нет серийника, найти другое уникальное значение.

Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

Отправлено: 09:58, 12-02-2021

 

Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


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

Отправлено: 19:06, 15-02-2021 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


(*.*)


Сообщения: 36512
Благодарности: 6681

Профиль | Сайт | Отправить PM | Цитировать


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 и не вижу ничего удобного, за что можно зацепиться

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 11:24, 17-02-2021 | #3


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


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

Отправлено: 12:52, 17-02-2021 | #4


Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

Последний раз редактировалось Griboed0ff, 17-02-2021 в 13:43.


Отправлено: 13:35, 17-02-2021 | #5


(*.*)


Сообщения: 36512
Благодарности: 6681

Профиль | Сайт | Отправить PM | Цитировать


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

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

-------
Канал Windows 11, etc | Чат @winsiders

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:57, 17-02-2021 | #6


Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

Последний раз редактировалось Griboed0ff, 17-09-2021 в 15:33.


Отправлено: 14:04, 17-02-2021 | #7


Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

Отправлено: 14:10, 17-02-2021 | #8


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


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

Отправлено: 14:30, 17-02-2021 | #9


Новый участник


Сообщения: 6
Благодарности: 3

Профиль | Отправить PM | Цитировать


Всем привет!

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

Последний раз редактировалось AAT666, 01-03-2021 в 10:34.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:26, 01-03-2021 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - мониторы, нет серийника, найти другое уникальное значение.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - [решено] Мониторы, выбрать нужное значение. Griboed0ff Скриптовые языки администрирования Windows 10 10-02-2021 12:34
CMD/BAT - [решено] Найти наибольшее значение файла crazydog Скриптовые языки администрирования Windows 3 26-09-2019 09:47
Нет сигнала с видеокарт на мониторы taraleks Видеокарты 3 10-05-2018 23:27
MySQL - Найти ближайшее значение stihmih Программирование и базы данных 2 26-08-2012 17:51
2010 - [решено] Найти сопадающие значение в таблицах excel YulZo Microsoft Office (Word, Excel, Outlook и т.д.) 3 28-05-2012 09:30




 
Переход