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

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

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

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

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

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

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

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