Для расстановки специализированного ПО на все переносные устройства компании потребовалась необходимость построения группы компьютеров или 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:
Возможные значения 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 отчет:
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.
Итак, мы рассмотрели, как с помощью значения атрибута ChassisTypes класса SystemEnclosure построить SCCM коллекцию или создать WMI фильтр групповой политики, позволяющий выбрать все ноутбуки сети.