|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] извлечь данные о мониторах из реестра |
|
PowerShell - [решено] извлечь данные о мониторах из реестра
|
Старожил Сообщения: 211 |
Доброго всем времени суток! Есть задача получить данные о мониторах в винде, а именно модель и серийный номер. Данные хранятся в реестре ("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY") в бинарном виде. Есть батник DispEDID, который умеет считывать и переводить в читабельный вид модель и серийник. Проблема в том, что данный батник выдает данные только 1 монитора, а если их 2 или 3 то, покажет данные последнего. Мозгов переписать такой сложный батник не хватает. Подумал может эту задачу проще решить через ps, по идее надо просто снять данные, конвертировать на человеческий, отправить в .cvs
|
|
Отправлено: 12:07, 17-04-2020 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 12:44, 17-04-2020 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Iska, данная команда не дает нужных данных. Они хранятся в бинарном виде и просто одной командой их не получить. Иначе зачем городили большой батник, если все было так просто.
|
Последний раз редактировалось Griboed0ff, 17-09-2021 в 15:33. Отправлено: 13:06, 17-04-2020 | #3 |
(*.*) Сообщения: 36565
|
Профиль | Сайт | Отправить PM | Цитировать Почитайте дискуссию в чате инсайдеров https://telega.at/winsiders/492449
|
------- Отправлено: 13:09, 17-04-2020 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Griboed0ff, а у меня даёт бо́́льшую часть:
Скрытый текст
C:\Мои проекты\0310>wmic.exe DesktopMonitor get /value Availability=3 Bandwidth= Caption=Philips 243V5 (23.6inch Wide LCD MONITOR 243V5) ConfigManagerErrorCode=0 ConfigManagerUserConfig=FALSE CreationClassName=Win32_DesktopMonitor Description=Philips 243V5 (23.6inch Wide LCD MONITOR 243V5) DeviceID=DesktopMonitor1 DisplayType= ErrorCleared= ErrorDescription= InstallDate= IsLocked= LastErrorCode= MonitorManufacturer=Philips Electronics MonitorType=Philips 243V5 (23.6inch Wide LCD MONITOR 243V5) Name=Philips 243V5 (23.6inch Wide LCD MONITOR 243V5) PixelsPerXLogicalInch=96 PixelsPerYLogicalInch=96 PNPDeviceID=DISPLAY\PHLC0D1\4&2ED0BDF8&0&UID16843008 PowerManagementCapabilities= PowerManagementSupported= ScreenHeight=1080 ScreenWidth=1920 Status=OK StatusInfo= SystemCreationClassName=Win32_ComputerSystem SystemName=XXX Серийного номера в выдаче нет. |
|
Отправлено: 13:33, 17-04-2020 | #5 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать нашел в дискуссии инсайдеров скрипты для ps
первый
Function Get-MonitorInfo
{ [CmdletBinding()] Param ( [Parameter( Position=0, ValueFromPipeLine=$true, ValueFromPipeLineByPropertyName=$true)] [string]$name = '.' ) Process { $ActiveMonitors = Get-WmiObject -Namespace root\wmi -Class wmiMonitorID -ComputerName $name $monitorInfo = @() foreach ($monitor in $ActiveMonitors) { $mon = New-Object PSObject $manufacturer = $null $product = $null $serial = $null $name = $null $week = $null $year = $null $monitor.ManufacturerName | foreach {$manufacturer += [char]$_} $monitor.ProductCodeID | foreach {$product += [char]$_} $monitor.SerialNumberID | foreach {$serial += [char]$_} $monitor.UserFriendlyName | foreach {$name += [char]$_} $mon | Add-Member NoteProperty Manufacturer $manufacturer $mon | Add-Member NoteProperty ProductCode $product $mon | Add-Member NoteProperty SerialNumber $serial $mon | Add-Member NoteProperty Name $name $mon | Add-Member NoteProperty Week $monitor.WeekOfManufacture $mon | Add-Member NoteProperty Year $monitor.YearOfManufacture $monitorInfo += $mon } $monitorInfo | } } второй
Function Get-MonitorInfo
{ [CmdletBinding()] Param ( [Parameter( Position=0, ValueFromPipeLine=$true, ValueFromPipeLineByPropertyName=$true)] [alias("CN","MachineName","Name","Computer")] [string[]]$ComputerName = $ENV:ComputerName ) Begin { $pipelineInput = -not $PSBoundParameters.ContainsKey('ComputerName') } Process { Function DoWork([string]$ComputerName) { $ActiveMonitors = Get-WmiObject -Namespace root\wmi -Class wmiMonitorID -ComputerName $ComputerName $monitorInfo = @() foreach ($monitor in $ActiveMonitors) { $mon = $null $mon = New-Object PSObject -Property @{ ManufacturerName=($monitor.ManufacturerName | % {[char]$_}) -join '' ProductCodeID=($monitor.ProductCodeID | % {[char]$_}) -join '' SerialNumberID=($monitor.SerialNumberID | % {[char]$_}) -join '' UserFriendlyName=($monitor.UserFriendlyName | % {[char]$_}) -join '' ComputerName=$ComputerName WeekOfManufacture=$monitor.WeekOfManufacture YearOfManufacture=$monitor.YearOfManufacture} $monitorInfo += $mon } Write-Output $monitorInfo } if ($pipelineInput) { DoWork($ComputerName) } else { foreach ($item in $ComputerName) { DoWork($item) } } } } Оба обрабатывают без ошибок, но и результат не выводят. просто запустил и ничего не происходит. |
Отправлено: 13:50, 17-04-2020 | #6 |
(*.*) Сообщения: 36565
|
Профиль | Сайт | Отправить PM | Цитировать Нашел скрипты по ссылке, но ссылку не дал https://www.hofferle.com/retrieve-mo...th-powershell/
А так, все работает же, прямо из дискуссии копирую $m = gwmi wmimonitorid -Namespace root\wmi [string][char[]] ($m.UserFriendlyName) -join "" [string][char[]] ($m.SerialNumberID) -join "" |
------- Отправлено: 14:49, 17-04-2020 | #7 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Цитата Vadikan:
Еще небольшой вопросик есть: как направить вывод в .csv, в виде таблицы как на картинке. |
|
Последний раз редактировалось Griboed0ff, 17-09-2021 в 15:33. Отправлено: 15:42, 17-04-2020 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать А у меня в среде ISE:
приводит к лишним пробелам. Без приведения к [string] — отображение нормальное: Скрытый текст
PS C:\> $m = gwmi wmimonitorid -Namespace root\wmi [string][char[]] ($m.UserFriendlyName) -join "" [string][char[]] ($m.SerialNumberID) -join "" '' [char[]] ($m.UserFriendlyName) -join "" [char[]] ($m.SerialNumberID) -join "" P H L 2 4 3 V 5 Z V 0 1 4 4 3 0 1 3 5 6 3 PHL 243V5 ZV01443013563 PS C:\> |
Отправлено: 16:59, 17-04-2020 | #9 |
(*.*) Сообщения: 36565
|
Профиль | Сайт | Отправить PM | Цитировать Iska, согласен, но я просто брал код из чата.
Цитата Griboed0ff:
|
|
------- Отправлено: 17:57, 17-04-2020 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - [решено] Как из архивного образа системы извлечь нужные данные реестра? | ZurabK | Microsoft Windows Vista | 5 | 10-09-2020 12:08 | |
Прочие БД - Восстановить или извлечь данные из Jetxxx.tmp, временного файла MS Access DB | tweaxl | Программирование и базы данных | 2 | 18-06-2012 02:03 | |
CMD/BAT - [решено] как извлечь все значения определенного ключа реестра из определенной ветки | baza450 | Скриптовые языки администрирования Windows | 6 | 27-12-2011 13:41 | |
HDD - Как извлечь данные с жёсткого диска | Alla65 | Накопители (SSD, HDD, USB Flash) | 8 | 17-04-2009 18:27 | |
MySQL - [решено] Извлечь данные одним запросом | Strange_V | Программирование и базы данных | 4 | 20-02-2008 23:18 |
|