Я не уверен, что это вполне возможно, но мне трудно написать оператор запроса WQL, который позволил бы мне заполнять коллекции устройств SCCM на основе машинной переменной.
Пример: устройство с именем «TestVM-01» имеет машинную переменную с именем «PatchGroup» со значением «Hour1». Я хотел бы, чтобы коллекция устройств под названием «Hour1» динамически заполняла все устройства с переменной PatchGroup, установленной на Hour1.
Сначала я попытался просто запросить переменные устройства через PowerShell и WMI, поскольку класс SMS_MachineVarible является ленивым свойством SMS_MachineSettings, поэтому вы должны вызывать объекты по их полному пути.
В Powershell / WMI я могу запросить его примерно так:
(([wmi]"\\SCCM-LAB\root\sms\site_001:SMS_Machinesettings.ResourceID=11111111").machinevariables | where name -eq "PatchGroup").value
Если вы запросите SMS_MachineSettings без указания полного пути к объекту, он вернет атрибут MachineVariables как пустой
Сможет ли кто-нибудь сказать мне, как я могу написать WQL для этого, чтобы вытащить этот список объектов из класса SMS_Resource «where PatchGroup = x»?
Ни один WMI-запрос не будет работать с этим, как и стандартный «Мастер создания коллекции устройств». Ленивые свойства - это список свойств и значений других экземпляров объекта, нам нужно использовать COM-интерфейс SwbemServices.ExecQuery () в VBscript и PowerShell или Get-WmiObject в PowerShell для извлечения данных.
Я бы сделал это, используя, например, PowerShell Script, для создания списка идентификаторов ресурсов компьютера и использовал эти идентификаторы для создания коллекции DirectRule с помощью встроенного командлета CM. Каждый раз я буду запускать скрипт перед тем, как использовать эту коллекцию.
См. Ниже блоки скрипта, чтобы получить список ResourceID:
$cmdletLocaltion = 'C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\ConfigurationManager.psd1'
$sitecode = 'P01:'
Import-Module $cmdletLocaltion
cd $sitecode
#-Lines to cleanup all the directcollection membership rules -#
$machineObject = Get-WmiObject -Namespace root\sms\site_p01 -Class sms_machinesettings
Foreach ($machine in $machineObject)
{
$Path = $machine.__PATH
$machine = [wmi]"$path"
foreach ($varvalue in $machine.MachineVariables)
{
if (($varvalue.name -eq 'PatchGroup') -and ($varvalue.Value -eq 'Hour1'))
{
$machine.ResourceID
#--line here to add to collection membership--#
}
}
}