现在我正在使用两个不同的查询并比较结果对象,但是我更喜欢一个唯一的查询来完成所有需要的查询,因为我希望直接在SCCM中使用它,而不仅仅是PowerShell。
(第一个查询创建一个包含所有安装了某个x64软件的计算机的对象,第二个对象创建一个包含所有未安装某个x86软件的计算机的查询)
比较这两个对象,我可以得到我需要的列表(哪台机器在两个对象中)
但是,我如何将这两个查询组合在一起,使其成为一个查询呢?
如下所示:
所有有SMS_G_System_ADD_REMOVE_PROGRAMS_64.DisplayName = "SOFTWARE1“但没有SMS_G_System_ADD_REMOVE_PROGRAMS.DisplayName = "SOFTWARE2”的计算机
$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
https://stackoverflow.com/questions/56466389
复制相似问题