Для розстановки спеціалізованого ПЗ на всі переносні пристрої компанії потрібна була необхідність побудови групи комп'ютерів або 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 фільтр групової політики, що дозволяє вибрати всі ноутбуки мережі.