SCCM WQL查询-列出特定已安装应用程序的版本?

时间:2019-03-08 17:59:58

标签: powershell sccm wql

我正在努力为SCCM创建WQL查询,因为我确实很新,并且很少以复杂的方式使用它。

我的目标是列出3件事:计算机名称-显示名称(“ Google Chrome”)-显示版本(该Google Chrome条目的版本)

我从这里开始:

equals1<-function(x){
   if(is.null(x)){
     return(FALSE)
     }else if(is.na(x)){
       return(FALSE)
     }else{return(x==1)}
}
c(equals1(1),equals1(Inf),equals1(NA),equals1(NULL),equals1(NaN))
# [1]  TRUE FALSE FALSE FALSE FALSE

输出对我来说有点奇怪:

$SiteCode = "XXX"
$SiteServer = "XXX"


$query = @"

select SMS_R_System.Name, SMS_G_System_ADD_REMOVE_PROGRAMS.DisplayName, SMS_G_System_ADD_REMOVE_PROGRAMS.Version
from  SMS_R_System
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 = "Google Chrome"

"@


Get-WmiObject -namespace root\sms\site_$SiteCode -computer $SiteServer -query $query

我在这里想念什么?同样,我真的很陌生,因此我必须缺少逻辑的关键部分。

如果我删除:

__GENUS                          : 2
__CLASS                          : __GENERIC
__SUPERCLASS                     : 
__DYNASTY                        : __GENERIC
__RELPATH                        : 
__PROPERTY_COUNT                 : 2
__DERIVATION                     : {}
__SERVER                         : XXX
__NAMESPACE                      : root\sms\site_PR1
__PATH                           : 
SMS_G_System_ADD_REMOVE_PROGRAMS : System.Management.ManagementBaseObject
SMS_R_System                     : System.Management.ManagementBaseObject
PSComputerName                   : XXX

查询有效,并向我显示所有安装了Chrome的计算机:

, SMS_G_System_ADD_REMOVE_PROGRAMS.DisplayName, SMS_G_System_ADD_REMOVE_PROGRAMS.Version

但是我也想要这2个属性,而不仅仅是计算机名,这样我就可以确认版本号。

非常感谢。

2 个答案:

答案 0 :(得分:1)

答案是像@TheIncorrigible所指出的那样简单地“扩展”字典。

所以这就是我最终使用Select-Object中的Name / Expression方法完成此操作的方法:

std::unordered_set

答案 1 :(得分:1)

以替代方式扩展我的评论以解决当前的问题:

$wmiParams = @{
    Namespace    = 'root/sms/site_XXX'
    ComputerName = 'XXX'
    Query        = @'
SELECT SMS_R_System.Name, SMS_G_System_ADD_REMOVE_PROGRAMS.DisplayName, SMS_G_System_ADD_REMOVE_PROGRAMS.Version
FROM SMS_R_System
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 = "Google Chrome"
'@
}
$smsResults = Get-WmiObject @wmiParams

foreach ($object in $smsResults) {
    [pscustomobject]@{
        ComputerName = $object['SMS_R_System']['Name']
        DisplayName  = $object['SMS_G_System_ADD_REMOVE_PROGRAMS']['DisplayName']
        Version      = $object['SMS_G_System_ADD_REMOVE_PROGRAMS']['Version']
    }
}