sergey vasin

The IT blog

Используем PowerShell и WMI для нахождения беспроводных клавиатуры и мыши – Hey, Scripting Guy! Blog

leave a comment »

Резюме: Microsoft Scripting Guy, Ed Wilson рассказывает об использовании PowerShell и WMI для нахождения подключенных беспроводных клавиатуры и мыши.

Используем WMI для нахождения беспроводных клавиатуры и мыши

Когда я работал консультантом, мои заказчики хотели иметь возможность определять, кто использует беспроводную мышь или клавиатуру. Это было нужно для целей инвентаризации, аудита или просто для информации. Однако тогда не было способа получить эту информацию, поскольку два класса WMI (Win32_Keyboard и Win32_PointingDevice) не определяли беспроводные устройства. Они выдавали информацию, касающуюся только «основных устройств», физически подключенных к компьютеру.

С некоторого времени, WMI начал выдавать информацию по беспроводным устройствам. Сейчас я не обладаю необходимыми ресурсами, поэтому я не могу сказать точно, когда WMI стал отображать беспроводную клавиатуру и мышь. Однако в этом посте я приведу код как для Windows PowerShell 3.0, так и для Windows PowerShell 2.0, так что вы сможете определить это сами. Сейчас мы находимся в середине трехнедельного путешествия, я и даже не взял зимнюю одежду, не говоря уже о трех ноутбуках с различными версиями Windows. Однако я знаю, что это работает на моем ноутбуке с Windows 8.

Сначала беспроводная мышь

Итак, мышь. WMI называет ее «pointdevice», поэтому нам нужен класс Win32_PointingDevice. Я могу получить список подключенных мышей, запросив этот класс.

Get-WmiObject win32_PointingDevice

В Windows PowerShell 3.0 я могу использовать командлет Get-CimInstance.

Get-CimInstance Win32_PointingDevice

Команды выводят множество свойств, некоторые из них даже не имеют значений. Ниже приведен скриншот запроса и часть выходных данных.

01

Более понятный вывод получается, если передать результаты фильтру HasWMIValue, из моего модуля Scripting Guys WMI. Этот фильтр показывает только те свойства, которые обладают значениями.

 02

Итак, я нашел то, что искал – заголовок (caption) со значением HID-compliant mouse. Эту информацию я также мог найти в окне «Devices and Printers». На самом деле я даже мог бы открыть это окно из PowerShell– с помощью командлета Show-ControlPanelItem.

Show-ControlPanelItem devices*

Ниже приведен скриншот страницы свойств мыши.

 03

С точки зрения управления, два наиболее важных свойства – это Description и PNPDeviceID. Я воспользуюсь командлетом Get-WmiObject для получения обоих мышей, затем я отфильтрую результаты по значению «hid» с помощью командлета Where-Object, и, наконец, передам информацию командлету Format-Table, для удобного представления информации.

Синтаксис Windows PowerShell 2.0:

Get-WmiObject win32_PointingDevice | Where-Object { $_.Description -match ‘hid’} | Format-Table description, pnpDeviceID -AutoSize -Wrap

Синтаксис Windows PowerShell 3.0:

Get-CimInstance win32_PointingDevice | Where Description -match ‘hid’ | Format-Table description, pnpDeviceID -AutoSize –Wrap

Ниже приведены результаты обеих команд.

04

Теперь беспроводная клавиатура

Точно так же, как я использовал WMI для нахождения беспроводной мыши, я могу воспользоваться им для нахождения беспроводной клавиатуры. Мне нужен класс Win32_Keyboard. Ниже приведен вывод после передачи результатов фильтру HasWMIValue – это все, о чем мне говорит WMI.

 05

И опять, два интересующих меня свойства – это PNPDeviceID и Description. Вот команды, который я использовал для построения моего «отчета»:

Синтаксис WindowsPowerShell 2.0:

Get-WmiObject win32_Keyboard | Where-Object { $_.Description -match ‘hid’} | Format-Table description, pnpDeviceID -AutoSize -Wrap

Синтаксис Windows PowerShell 3.0:

Get-CimInstance win32_keyboard | Where Description -match ‘hid’ | Format-Table description, pnpDeviceID -AutoSize –Wrap

Результаты выполнения команд приведены на рисунке.

 06

Они практически одинаковые – совместим их

Одна из отличных вещей в WMI – это то, что иногда он весьма целостный. И как получается, этот как раз тот случай. Я фильтрую результаты по слову «hid» и выбираю два одинаковых свойства – Description и PNPDeviceID. Таким образом, я могу сформировать массив классов WMI и выполнить оба запроса одновременно. Код приведен ниже, где gwmi – это алиас для Get-WmiObject, % — алиас для Foreach-Object, ? – алиас для Where-Object, и ft – алиас для Format-Table.

$class = «win32_pointingdevice»,»win32_keyboard»

$class | % {gwmi $_ | ? description -match ‘hid’} | ft description, PNPDeviceID -A –Wr

Вывод команды приведен на рисунке.

 07

Автор:

Ed Wilson, Microsoft Scripting Guy

Оригинал:

http://blogs.technet.com/b/heyscriptingguy/archive/2012/11/30/use-powershell-and-wmi-to-find-wireless-keyboard-amp-mouse.aspx


Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


Реклама

Written by Сергей Васин

Декабрь 7, 2012 в 11:51

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s