SCCM / WMI запрос для выборки всех ноутбуков в домене

Для расстановки специализированного ПО на все переносные устройства компании потребовалась необходимость построения группы компьютеров или SCCM коллекции, которая бы включала в себя все ноутбуки (и другие переносные мобильные системы), работающие в корпоративной сети. Задача оказалась не так проста, как кажется на первый взгляд. Мне сразу не удалось найти свойство системы, которое бы однозначно определяло компьютер как ноутбук или десктоп.

Для начала попробовал отфильтровать мобильные компьютеры с помощью WMI фильтров GPO, и назначить на них установку ПО с помощью групповых политик. Было несколько вариантов составления WMI запросов путем проверки:

  • статуса батареи (она есть только у ноутбуков): SELECT * FROM Win32_Battery WHERE (BatteryStatus <> 0)
  • типа оперативной памяти (SODIMM для ноутбуков): Select * from Win32_PhysicalMemory WHERE (FormFactor = 12)
  • свойства PCSystemType: SELECT * FROM Win32_ComputerSystem WHERE PCSystemType = 2

Примечание. Возможные значения PCSystemType

ЗначениеТип системы
0Unspecified
1Desktop
2Mobile
3Workstation
4Enterprise Server
5Small Office and Home Office (SOHO) Server
6Appliance PC
7Performance Server
8Maximum

У каждого из предложенных запросов есть свои плюсы и минусы. Наиболее корректной по идее должна быть фильтрация по значению PCSystemType, но, увы этот класс появился только в Vista, а у нас осталось довольно много компьютеров с устаревшей Windows XP, которые не будут фильтроваться таким запросом.

Более интересным мне показался WMI запрос на определение типа шасси (ChassisTypes), содержащийся в классе Win32_SystemEnclosure:

Wmi explorer  класс Win32_SystemEnclosureВозможные значения ChassisTypes приведены в таблице:

Значение ChassisTypesТип системы
1Other
2Unknown
3Desktop (в том числе виртуальные машины)
4Low Profile Desktop
5Pizza Box
6Mini Tower
7Tower
8Portable
9Laptop
10Notebook
11Hand Held
12Docking Station
13All in One
14Sub Notebook
15Space-Saving
16Lunch Box
17Main System Chassis
18Expansion Chassis
19Sub Chassis
20Bus Expansion Chassis
21Peripheral Chassis
22Storage Chassis
23Rack Mount Chassis
24Sealed-Case PC

Таким образом, значение Chassis Types:

  • для ноутбуков: 8 , 9, 10, 11, 12, 14, 18, 21
  • для десктопов: 3, 4, 5, 6, 7, 15, 16
  • для серверов: 17,23

Итоговый WMI запрос будет таким

select * from Win32_SystemEnclosure where ChassisTypes = "8" or ChassisTypes = "9" or ChassisTypes = "10" or ChassisTypes = "11" or ChassisTypes = "12" or ChassisTypes = "14" or ChassisTypes = "18" or ChassisTypes = "21"

Этот WMI фильтр можно легко преобразовать в запрос SCCM, позволяющий построить коллекцию, включающую в себя  все ноутбуки в сети.

select SMS_R_SYSTEM.ResourceID,SMS_R_SYSTEM.ResourceType,SMS_R_SYSTEM.Name, SMS_R_SYSTEM.SMSUniqueIdentifier,SMS_R_SYSTEM.ResourceDomainORWorkgroup, SMS_R_SYSTEM.Client from SMS_R_System inner join SMS_G_System_SYSTEM_ENCLOSURE on SMS_G_System_SYSTEM_ENCLOSURE.ResourceID = SMS_R_System.ResourceId where
SMS_G_System_SYSTEM_ENCLOSURE.ChassisTypes in ( "8", "9", "10","11", "12", "14","18","21")

SCCM запрос для выбора ноутбуков

Ну и, наконец, для наглядного представления информации о количественном соотношении десктопов и лаптов в сети, можно построить SCCM отчет:

SELECT
CASE ChassisTypes0
WHEN '8' THEN 'Notebooks'
WHEN '9' THEN 'Notebooks'
WHEN '10' THEN 'Notebooks'
WHEN '11' THEN 'Notebooks'
WHEN '12' THEN 'Notebooks'
WHEN '14' THEN 'Notebooks'
WHEN '18' THEN 'Notebooks'
ELSE 'Desktops'
END AS "Workstation Type", count(distinct sys.name0) as ClientCount from
v_GS_SYSTEM_ENCLOSURE ENC
INNER JOIN
v_R_System SYS ON ENC.ResourceID = SYS.ResourceID
WHERE
sys.client0=1 AND sys.obsolete0=0 AND active0=1
GROUP BY
CASE ChassisTypes0
WHEN '8' THEN 'Notebooks'
WHEN '9' THEN 'Notebooks'
WHEN '10' THEN 'Notebooks'
WHEN '11' THEN 'Notebooks'
WHEN '12' THEN 'Notebooks'
WHEN '14' THEN 'Notebooks'
WHEN '18' THEN 'Notebooks'
ELSE 'Desktops'
END
ORDER BY 2 desc

В нашем случае соотношение настольных ПК и ноутбуков 2832 к 109.

SCCM отчет соотношение ПК и ноутбуков Итак, мы рассмотрели, как с помощью значения атрибута ChassisTypes класса SystemEnclosure построить SCCM коллекцию или создать WMI фильтр групповой политики, позволяющий выбрать все ноутбуки сети.


Предыдущая статья Следующая статья

Комментариев: 0 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)