SCCM是微软的企业级桌面治理产物,说是桌管,但实在在老王看来SCCM最能拿得脱手的现实上是它的资产智能报表和相符性基线功效。

人人玩过SCCM的都知道,SCCM报表默认能统计上来的资产无非就是硬件信息,软件安装信息,允许信息。

统计软件的时刻可以根据软件的维度,统计某聚集下所有的已安装软件,通过报表钻取一级一级的找到安装了软件的盘算机,盘算机的硬件设置,IP,登录用户。

然则在我国企业信息项目永远都需要的就是定制,老板们需要简朴一目了然

举个例子,有个需求,需要界说出一类非办公软件,在一张报表内里统计出有哪些盘算机,安装了非办公软件,以及这些盘算机的使用人。

获得这个需求后,若是你仔细看过每一张报表你会发现,看起来很简朴的需求,但没有一张报表可以直接显示出来这些信息。而且怎样界说出来非标准软件也是个问题,若是你只是四处简简朴单的领会一下,你是找不到怎么去界说这个器械的。

本篇文章老王就以这个需求为例,为宽大itpro先容一下若何去界说非办公软件,简朴的找到我们需要的数据,以及若何在不开发的情况下的输出成报表。


在正式最先之前,我们需要弥补一些基础知识

什么是WMI,WMI是微软提供的一个封装了Windows上面所有硬件软件信息资源的规范API接口,我们可以通过wmic下令,VBScript,powershell,C#,WQL语言去对WMI封装的资源举行查询,治理操作。
举个例子我们可以通过powershell挪用wmi类,查询系统windows office的到期时间。

WQL是WMI特有的查询语言

可以通过wbemtest工具查找类,对WQL语言举行测试。

WQL类似于SQL语言,但语法仍存在差别之处,不能直接拿到SQLServer内里执行。


WMI和SCCM的关系

SCCM客户端署理通过WMI网络客户端信息,汇报给SCCM服务

SMS Provider :在ConfigMgr 控制台和站点数据库服务器之间提供接口的WMI提供程序,默认安装完成主站点之后自动包罗的一个组件,由于SCCM使用WMI(WQL语言),而SQL数据库运行的是SQL实例,可以简朴理解为是通过SMS Provider将WQL翻译为SQL,最终实现SCCM和SQL之间的交互。

人人在SCCM控制台执行操作的时刻,对照显著的两个地方,基于查询规则建立聚集,监视内里建立查询的时刻,我们通过图形界面点击的时刻,在图形界面看到的语言显示的会是WQL,许多人以为是SQL语言,现实上我们控制台上面写的查询并不是现实的SQL,而是通过smsprod将wql转为sql语言最终去执行,事实上不仅仅是这个地方,许多个位置都是我们在SCCM控制台执行的操作后台都市通过smsprod这个组件现实帮我们转换成SQL执行。


OK,基础知识铺垫到位,下面最先完成我们的需求,要实现这个需求有两种方案,今天我们先说曲线救国的一种

这个需求首先我们需要界说出一类软件,这一些软件为非办公软件,先把这部分数据拿到。

打开SCCM控制台-监视-查询,查询是个好玩具,我们可以通过简朴的向导,天生一个WQL查询,我们甚至不需要关注WQL语言怎么写,只需要知道我们想要的数据应该在哪找到就可以。

一,建立查询,界说需要包罗在查询内的局限,本次我们选择装备聚集

二,点击编辑查询语言,弹出查询向导,界说查询效果中,需要显示的列,这里有许多属性类人人可以多去看看找出自己需要的。

最终显示效果应该包罗
已安装的应用信息类下面的显示名称属性
已安装的应用信息类下面的版本属性
系统资源类下面的名称属性(盘算机名)
系统资源下面的上一个登录用户名属性

三,界说非办公软件,过滤只显示非办公软件的数据

听到这个需求的时刻,我脑壳里第一时间想到的是通过软件标签来玩,界说一批软件标签,然后给一次性的给网络上来的软件根据标签打上,最终在根据标签统计报表。

但实在通过查询我们也可以实现完成这种需求,打开适才的编辑查询语言,调出查询向导,编辑条件,这里有两种玩法,第一种条件是直接添加的方式,添加条件,条件类型为值列表,位置为已安装的应用程序,显示名称,基于显示名称作为判断条件,运算符选择属于,点击左下方的值,可以列出所有通过SCCM网络上来的客户端上面已经安装的软件,我们可以一个一个点击然后添加到右面。界说出一批非办公软件列表,然后点击确定保留。

点击查询设计界面的显示查询语言,可以看到通过我们在向导编辑后,自动天生的WQL语言,可以拷贝出来,以后直接导入复用。


四,执行查询效果,可以看到输出在界面上的数据

五,查询效果转换
到现在为止,我们所需要的数据已经拿到了,看到这里人人应该可以发现,查询的利益就是简朴,利便,通过一个向导就可以直接帮我们天生想要的查询效果。这可能也就是一直保留WQL的一个缘故原由,利便我们这些不能直接写SQL的itpro在图形界面执行查询,然则不完美的地方就是界说好的查询,只能在SCCM控制台点击运行这样查看,不能天生报表,以是看起来照样不太利便。

查询的语言还不能直接用来做出报表,缘故原由就是SCCM报表使用的是SQL语言做的,而查询界面的查询效果是WQL语言

然则我们可以通过方式将WQL转成能用来做报表的SQL语言

SCCM有一个log叫smsprov.log,位于安装路径Program Files\Microsoft Configuration Manager\Logs内里,smsprov.log记录了我们在SCCM控制台执行的所有操作,以及背后的现实运作,例如我们推送软件的历程,界面上面执行WQL查询后台转换SQL的历程。

我们点击运行一次建立好的查询效果,然后通过cmtrace打开smsprov.log,可以看到后台现实上WQL转成SQL后的语句,语句可以直接拷贝交给开发,或者放到Report Builder制作报表。

六,制作报表
在SCCM控制台监视报表中建立一个报表,会自动呼叫出Report Builder窗口


添加数据源,使用共享毗邻或报表模子,浏览Reportserver目录下,找到SCCM报表目录中的数据源文件

添加凭证后测试毗邻,确保乐成建立毗邻,点击确定。

添加数据集,选择使用嵌入的数据集,浏览已经添加的数据源,在查询窗口把从smsprov日志复制的转换后的sql语句粘贴进来

添加之后,点击刷新字段,若是没有报错,会在字段界面显示我们在查询中界说的四个列,若是这一步报错不能正常刷新字段,说明语句中可能包罗错误。

可以改成加倍直观的显示名

返回Report Builder首页,点击添加表,选择我们定好的数据集

将可用字段拖拽到值区域

点击下一步,选择报表颜色样式

点击完成,可以瞥见我们定制好的报表,可以通过插入图片,文字,举行编辑花样,编辑完成后,点击上方保留即可自动公布回SCCM

打开SCCM Report接见网页,可以瞥见我们适才公布的报表,数据是实时更新的,可以设计天生,也可以转成其他花样输出。

至此我们通过第一种方式实现了需求,思绪流程如下

1.通过自带查询功效曲线界说非办公软件
2.将查询获得的WQL语句转换为SQL语句
3.使用转换后的SQL语句建立Report报表

在通过查询界说条件时刻,也可以在条件处,条件类型选择简朴值,运算符选择类似于,可以通过模糊匹配出一类软件,如 所有名称%匹配游戏的软件,所有名称%匹配下载软件的,可以添加多个条件,多个条件之间会是or的关系,然后把WQL转换为SQL拿去使用。

select SMS_G_System_ADD_REMOVE_PROGRAMS.DisplayName, SMS_R_System.LastLogonUserName 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 like "%游戏%" or SMS_G_System_ADD_REMOVE_PROGRAMS.DisplayName like "%下载%"


希望可以通过我的这篇文章为人人抛砖引玉,把SCCM的报表功效更好的在企业运用起来,下篇我讲为人人先容,若何通过为软件界说标识的方式区分出差别种别软件。