SCCM是微软的企业级桌面管理产品,说是桌管,但其实在老王看来SCCM最能拿得出手的其实是它的资产智能报表和符合性基线功能。
sql
你们玩过SCCM的都知道,SCCM报表默认能统计上来的资产无非就是硬件信息,软件安装信息,许可信息。
shell
统计软件的时候能够按照软件的维度,统计某集合下全部的已安装软件,经过报表钻取一级一级的找到安装了软件的计算机,计算机的硬件配置,IP,登陆用户。
可是在我国企业信息项目永远都须要的就是定制,老板们须要简单一目了然
举个例子,有个需求,须要定义出一类非办公软件,在一张报表里面统计出有哪些计算机,安装了非办公软件,以及这些计算机的使用人。
数据库
获得这个需求后,若是你仔细看过每一张报表你会发现,看起来很简单的需求,但没有一张报表能够直接显示出来这些信息。并且怎样定义出来非标准软件也是个问题,若是你只是处处简简单单的了解一下,你是找不到怎么去定义这个东西的。
本篇文章老王就以这个需求为例,为广大itpro介绍一下如何去定义非办公软件,简单的找到咱们须要的数据,以及如何在不开发的状况下的输出成报表。
在正式开始以前,咱们须要补充一些基础知识
什么是WMI,WMI是微软提供的一个封装了Windows上面全部硬件软件信息资源的规范API接口,咱们能够经过wmic命令,VBScript,powershell,C#,WQL语言去对WMI封装的资源进行查询,管理操做。
举个例子咱们能够经过powershell调用wmi类,查询系统windows office的到期时间。windows
WQL是WMI特有的查询语言服务器
能够经过wbemtest工具查找类,对WQL语言进行测试。ide
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执行。ui
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的报表功能更好的在企业运用起来,下篇我讲为你们介绍,如何经过为软件定义标识的方式区分出不一样类别软件。