В процессе развертывания программного обеспечения через SCCM может возникнуть необходимость создания отдельных коллекций компьютеров в зависимости от битности используемой на них ОС, так как сейчас многие приложения имеют отдельные инсталляционные пакеты для разных платформ. Пример запроса на создание коллекции компьютеров по маске имени (например выбираем только ноутбуки и рабочие станции) и битности ОС для 32-битных систем Windows:
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_COMPUTER_SYSTEM
on SMS_G_System_COMPUTER_SYSTEM.ResourceId = SMS_R_System.ResourceId
where (
SMS_R_System.NetbiosName like "KOM-%-NB%"
or SMS_R_System.NetbiosName like "KOM-%-WS%"
)
and SMS_G_System_COMPUTER_SYSTEM.SystemType = "x86-based PC"
И соответственно тот же запрос только для 64-битных систем Windows будет отличаться лишь последней строкой:
and SMS_G_System_COMPUTER_SYSTEM.SystemType = "x64-based PC"
Компьютеры под управлением Windows в среднестатистическом рабочем окружении могу иметь три основных типа существования:
- 32-битная ОС установлена на x86 процессор
- 64-битная ОС установлена на x64 процессор
- 32-битная ОС установлена на x64 процессор
- Мы можем наглядно получить информацию о распределении таких типов существования в нашем окружении сформировав на SCCM отчет с запросом:
select distinct sys.netbios_name0,
case when pr.addresswidth0 = 64 then '64bit OS'
when pr.addresswidth0=32 then '32bit OS'
end as [Operating System Type],
case when pr.addresswidth0=32 and pr.DataWidth0=64 then '*'
end as [32-bit OS on x64 processor]
from v_r_system sys
join v_gs_processor pr on sys.resourceid=pr.resourceid
Результат будет выглядеть примерно так:
- Или например чтобы получить сводную информацию о том как в данный момент распределены версии ОС по компьютерам в зависимости от их аппаратных возможностей можно сделать отчет на базе запроса:
select
OS.Caption0,
case when pr.Is64Bit0=1 then '64-bit'
when pr.Is64Bit0=0 then '32-bit'
end as [Processor Type],
Count(*)
from
dbo.v_gs_processor PR Left Outer Join dbo.v_GS_OPERATING_SYSTEM OS on PR.ResourceID = OS.ResourceId
Group by OS.Caption0, pr.Is64Bit0
Order by OS.Caption0, pr.Is64Bit0
- Результат:
Возможно что эта информация будет полезна при планировании перехода с 32-битных систем на 64-битные.
- Источники информации:
- Sherry Kissinger at myITforum.com - 32bit vs 64bit Report
- Eswar Koneti's Blog - SCCM collection for Windows 7 Computers with 64 Bit OS
- Server Fault - SCCM Report to identify machines with 64-bit capable hardware
Алексей, добрый день! Как работать с SMS_R_SYSTEM стало понятно. А вы можете подсказать, как создать коллекцию компьютеров, к примеру, на которых установлен Internet Explorer 9 и Windows 7 x64? Пробовал связывать с SMS_G_System_INSTALLED_SOFTWARE по ResourceId, но не получилось (примечание: SCCM 2012 R2)
Лучше ипользовать "ADD_REMOVE_PROGRAMS_64" (если необходимо искать только x64 софт).
Вот пример запроса, где будут отобраны только те компьютеры, на которые установлен Kompas 3D Viewer x64 редакции:
select * from SMS_R_System inner join SMS_G_System_ADD_REMOVE_PROGRAMS_64 on SMS_G_System_ADD_REMOVE_PROGRAMS_64.ResourceId = SMS_R_System.ResourceId where SMS_R_System.OperatingSystemNameandVersion like "%Workstation%" and SMS_G_System_ADD_REMOVE_PROGRAMS_64.DisplayName like "%КОМПАС-3D Viewer%"
Знак "%" играет роль маски и означает любое число любых символов.
Но я бы не писал запросы вручную, в SC 2012 CM встроен достаточно хороший конструктор.