Имя пользователя:
Пароль:
 | Правила  

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

Ответить
Настройки темы
PowerShell - Видеоадаптер

Забанен


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

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


Каким образом можно узнать модель видеокарты и ассоциированный с ней раздел реестра? Через WMI можно получить только первое, а второе как сделать?

Отправлено: 09:35, 16-06-2017

 

Ветеран


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

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


jkadaba, а что именно Вы подразумеваете под:
Цитата jkadaba:
ассоциированный с ней раздел реестра »
?

Отправлено: 10:21, 16-06-2017 | #2



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

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


Забанен


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

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


Также хотелось бы задать вопрос касательно ассоциированного раздела реестра, но все же попробую телепатировать что же имелось в виду. Вроде бы как упомянался WMI, так вот если внимательно посмотреть на вывод:
Код: Выделить весь код
Get-WmiObject -Namespace root\cimv2 -Class Win32_VideoController
среди прочего можно заметить свойство PNPDeviceID, указывающее на значения в реестре по пути HKLM\SYSTEM\CurrentControlSet\PCI; там можно найти любую интересующую Вас информацию, а в подразделе, вроде бы, Control есть параметр ActiveService, указывающий на соответсвующий сервис, данные по которому можно отыскать в HKLM\SYSTEM\CurrentControlSet\Services. В принципе, если речь шла о сопутствующем сервисе, можно задействовать WinAPI'шную функцию EnumDisplayDevice(A|W). Например:
Скрытый текст
Код: Выделить весь код
function Get-DisplayDevices {
  <#
    .SYNOPSIS
        Gets information about the display devices in the current session.
    .NOTES
        Author: greg zakharov

        typedef struct _DISPLAY_DEVICE { // A |      W
          DWORD cb;                 // +0x000 | +0x000
          TCHAR DeviceName[32];     // +0x004 | +0x004
          TCHAR DeviceString[128];  // +0x024 | +0x044
          DWORD StateFlags;         // +0x0a4 | +0x144
          TCHAR DeviceID[128];      // +0x0a8 | +0x148
          TCHAR DeviceKey[128];     // +0x128 | +0x248
        } DISPLAY_DEVICE, *PDISPLAY_DEVICE;

        sizeof(DISPLAY_DEVICE)      //  0x1a8 |  0x348
  #>
  begin {
    $user32, $STATE_FLAGS = (New-Delegate user32 -Signature @{
      EnumDisplayDevicesW = [Func[[Byte[]], UInt32, [Byte[]], UInt32, Boolean]]
    }), @{
      AttachedToDesktop  = 0x00000001
      MultiDriver        = 0x00000002
      PrimaryDevice      = 0x00000004
      MirroringDrive     = 0x00000008
      VgaCompatible      = 0x00000010
      Removable          = 0x00000020
      UnsfaeModesOn      = 0x00080000
      DeviceTSCompatible = 0x00200000
      Disconnect         = 0x02000000
      Remote             = 0x04000000
      ModeSpruned        = 0x08000000
    }
  }
  process {
    $ddw = New-Object Byte[](0x348) # DISPLAY_DEVICEW
    # set size of the DISPLAY_DEVICEW structure before use it
    $ddw[0] = 0x048
    $ddw[1] = 0x003

    $i = 0
    while ($user32.EnumDisplayDevicesW.Invoke($null, $i, $ddw, 0)) {
      New-Object PSObject -Property @{
        DeviceName = [Text.Encoding]::Unicode.GetString($ddw[4..35])
        DeviceString = [Text.Encoding]::Unicode.GetString($ddw[68..195])
        StateFlags = $(
          $f = [BitConverter]::ToUInt32($ddw[324..327], 0)
          foreach ($key in $STATE_FLAGS.Keys) {
            if (($f -band $STATE_FLAGS[$key]) -eq $STATE_FLAGS[$key]) { $key }
          }
        )
        DeviceID = [Text.Encoding]::Unicode.GetString($ddw[328..455])
        DeviceKey = [Text.Encoding]::Unicode.GetString(
          $ddw[584..839]
        ).Trim("`0") -replace '\\registry\\machine', 'HKLM'
      } | Select-Object DeviceName, DeviceString, StateFlags, DeviceID, DeviceKey
      $i++
    }
  }
  end {}
}

Вывод примера выше довольно объемный, но Вас это не должно смущать. Основное видеоустройство помечано как PrimaryDevice в StateFlags;DeviceID - то же, что и PNPDeviceID, а DeviceKey указывает на Services в реестре. Хотя в принципе можно все то же получить с помощью командлетов Get-WmiObject, Get-ItemProperty путем простого сопоставления значений реестра.

Отправлено: 11:15, 16-06-2017 | #3



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Драйвер - [решено] Видеоадаптер в Виндовс 10 kievskiy17 Microsoft Windows 10 0 13-07-2016 21:17
BSOD - Не подключается видеоадаптер Mr.lol Хочу все знать 2 09-01-2016 18:38
ВИДЕОАДАПТЕР ноута The DEAD SiP02 Ноутбуки 2 21-06-2010 15:24
Драйвер - [решено] отключен видеоадаптер kuzjka Microsoft Windows 2000/XP 5 24-11-2009 12:26
Не устанавливается видеоадаптер inikonov Microsoft Windows 2000/XP 15 08-09-2003 20:14




 
Переход