Сейчас я использую два разных запроса и сравниваю полученные объекты, однако я бы предпочел уникальный запрос, который делает все необходимое, так как я хотел бы использовать его непосредственно в SCCM, а не только в PowerShell.
(Первый запрос создает объект со всеми компьютерами, на которых установлено определенное программное обеспечение x64, второй объект создает запрос со всеми компьютерами, на которых не установлено определенное программное обеспечение x86)
Два объекта сравниваются, и я могу получить нужный мне список (какие машины находятся в обоих объектах)
Однако, как бы я объединил эти два запроса, чтобы они все были в одном?
Как в:
Все компьютеры, которые ДЕЛАЮТ SMS_G_System_ADD_REMOVE_PROGRAMS_64.DisplayName = "ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ 1" И НЕ ИМЕЮТ SMS_G_System_ADD_REMOVE_PROGRAMS.DisplayName = "ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ2"
$SiteCode = "x"
$SiteServer = "x"
$query = @"
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_G_System_ADD_REMOVE_PROGRAMS_64.DisplayName = "SOFTWARE1"
"@
$postes_xx = (Get-WmiObject -namespace root\sms\site_$SiteCode -computer $SiteServer -query $query).SMS_R_SYSTEM.Name
$query = @"
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_G_System_COMPUTER_SYSTEM.Name
not in (select distinct SMS_G_System_COMPUTER_SYSTEM.Name
from SMS_R_System
inner join SMS_G_System_COMPUTER_SYSTEM
on SMS_G_System_COMPUTER_SYSTEM.ResourceID = SMS_R_System.ResourceId
inner join SMS_G_System_ADD_REMOVE_PROGRAMS
on SMS_G_System_ADD_REMOVE_PROGRAMS.ResourceID = SMS_R_System.ResourceId
where SMS_G_System_ADD_REMOVE_PROGRAMS.DisplayName = "SOFTWARE2" )
"@
$postes_32x = Get-WmiObject -namespace root\sms\site_$SiteCode -computer $SiteServer -query $query | select -ExpandProperty name
Compare-Object $postes_xx $postes_x32 -IncludeEqual -ExcludeDifferent