WMI学习技术知识必须要知道的内容(1)(转)

简介:

原文地址:http://blog.csdn.net/bubble4629/article/details/3793174 

WMI和软件开发

通常软件开发工作可以进行分类,这取决于它们将重点放在结构的哪个部件—应用程序、Schema或提供程序。

应用程序开发—通过收集和分析管理数据以及报告和反应事件通知来交付产品

              WMI对象模型通信时,应用程序可以使用:

              WMI COM API       (C,C++)

              WMI 脚步 API      (VBScript,JSript)

Schema开发—包括将变更应用于WMI Schema,他可以通过如下技术完成:
            MOF文件
            WMI COM API         (C,C++)
            WMI 脚本 API        (VBScript,JSript)
提供程序开发—授予访问有关被管理环境特定部分的信息。是WMI相关开发中最难的一部分切记。

通过探索WMI脚本对象模型开始,我们将发现它包含了很多对象及其他方法、属性和事件。
wbem脚本类型库wbemscripting存放在文件wbemdisp.tlb。
WMI脚本对象模型
如何在WMI脚本类型库中例示一个对象,同WScript用作WSH模型的入口点一样,wbemscripting用于提供对各种WMI脚本API接口的访问。
可以通过COM对象的脚本API ProgID来创建wbemscripting
wbemscripting.swbemlocator用于取得swbemservices对象,代表本地或远程计算机上名字空间的一个连接。
wbemscripting.swbemlasterror允许查询和处理最后方法调用的错误.
wbemscripting.swbemobjectpath需要创建和校验另一个对象路径.
wbemscripting.swbemnamedvalueset主要用于通信一组提供程序的值.
wbemscripting.swbemsink用于接收异步操作和事件通知的结果.
WMI对象是通过将createobject方法应用于前面所列的ProgID来创建,例如:
Dim MyLocator
set mylocator = createobject("wbemscripting.swbemlocator")

访问WMI对象
为了让你理解创建WMI名字空间初始连接的相对复杂过程,我将说明前面两种方法之间的不同。
假定需要使用WMI scripting API来获取远程服务器上有关spooler服务的信息。
1使用swbemlocator访问WMI对象
方法一:使用swbemlocator访问WMI对象
dim objlocator
set objlocator = createobject("wbemscripting.swbemlocator")
dim objmyservices
set objmyservices = objlocator.connectserver
set objspooler = objmyservices.get("win32_service=""spooler""")
dim intstatus
intstatus = objspooler.startservice()
wscript.echo intstatus
此时我们运行脚本会发现给我的返回值是:10
然后我们人为将windows服务print spooler的状态由“自动运行”变成“停止”可以得到我们的值为0
最后我们禁止调print spooler服务,可以得到的返回值:14
方法二:使用Monikers访问WMI对象(Monikers是一个标准的方法,用于将COM对象绑定在一起,它必须由3个部分组成1、winmgmts。2、假冒,验证,权限,特权和语言指示器。3、指向一个特定类或对象的WMI对象路径。)
dim objspooler
set objspooler = getobject("winmgmts:{impersonationlevel=impersonate}!win32_service=""spooler""")
dim intstatus
intstatus = objspooler.startservice()
wscript.echo intstatus
此时我们运行程序,发现得到相同的结果,因此我们可以知道使用Monikers访问WMI对象也是一样的。
总结分析两种方法,我们可以发现,第一种方法较传统,当重复访问WMI对象时,它的性能较好
第二种方法使用monikers,它的形式相当的简单,代码实现只用了两行就可读取属性了,呵呵,但是monikers只能用于创建SWbemObject和SWbemServices类型的对象和集合。

swbemservices和swbemobject类
swbemservices方法和属性
swbemservices方法用于管理WMI名字空间中的类和对象。
swbemservices方法
每种方法有它的异步等价方法,区别是否可以在使用后立即返回或它是否必须等待到它的结果可用。
异步方法的名称与同步方法的名称是相同的,唯一的区别在于Async后缀。
associatorsof(associatorsof)—将与对象有关的一组类或实例返回到你指定的路径
delete(deleteasync)—删除一个实例或类
execmethod(execmethodasync)—执行一个对象方法
execnotificationquery(execnotificationquerysync)—执行一个WQL查询以接收事件
execquery(execquerysync)—执行一个WQL查询以接收一组类或实例
get(getsync)—获取你指定路径的类或实例。省略可以创建一个空对象,可以使用它来创建新类
instancesof(instancesofsync)—返回指定类的一组实例
referencesto(referencestosync)—返回引用指定对象的一组类或实例
subclassof(subclassofsync)—返回指定类的一组子类。
swbemservices属性
swbemservices只有一个单独的属性。security_用于读取或改变安全设置

swbemobject方法和属性
本质上,swbemobject可以代表任何WMI对象。可以把swbemobject想成一个类或实例的临时容器。特别注意
swbemobject随着代表类或实例不同属性和方法也会不同,呵呵
swbemobject方法(同样存在异步版本)
associators_(associatorsasyn_)—获取于指定对象有关的一组对象
clone_—创建当前对象的一份拷贝
compareto_—检查两个对象是否相同
delete_(deleteasyn_)—从WMI存储库中删除对象
execmethod_(execmethodasyn_)—执行对象实现的方法当方法不能使用直接访问执行时,就可以使用它
getobjecttext_—在MOF语法中获取一个对象的全部说明
instance_(instanceasyn_)—获取对象的一组实例
put_(putasyn_)—创建或更新WMI存储库中的对象
referencesto_(referencestoasyn_)—获取引用指定对象的一组联合类和它们的实例
spawderivedclass_从当前对象派生出一个新类,当前对象必须是一个WMI类定义
spawninstance_—从当前对象创建一个新的实例,当前对象必须是一个WMI类定义
subclass_(subclassasyn_)—返回对象的一组子类,当前对象必须是一个WMI类定义
swbemobject属性
derivation_—描述类的派生层次结构的一组字串,第一个元素显示直接父结构,最后一个元素是层次结构顶部的类,只读
methods_—包含这个对象的一组方法的swbemmethodset对象,只读
path_—代表当前类或实例的对象路径的SWbemobjectpath路径。
properties_—这个对象的属性组的swbempropertyset对象,只读
qualifiers_—这个对象的限定词组的swbemqualifierset对象,只读
sercurity_—用于获取和改变安全设置(验证级别、假冒级别和特权)的swbesecurity对象
简单修改前面的程序如下:
dim objspooler
set objspooler = getobject("winmgmts:{impersonationlevel=impersonate}!win32_service=""spooler""")
dim intstatus
intstatus = objspooler.startservice()
wscript.echo intstatus
wscript.echo objspooler.properties_("startmode")
可以得到的结果为14,disable这样两个属性,呵呵,我们知道了如何直接使用对象的属性了吧。
此时我们必须知道,通过swbemobject对象的引用在脚本中开始,它们仅影响底层WMI对象的一个拷贝,而不会影响WMI对象本身。
实例:通过脚本改变“系统启动延时”属性
dim objsystem
set objsystem = getobject("winmgmts:{impersonationlevel=impersonate}!win32_computersystem=""bubble""")
wscript.echo objsystem.systemstartupdelay
objsystem.systemstartupdelay = 5
wscript.echo objsystem.systemstartupdelay
objsystem.put_
以上就是我们修改systemstartupdelay的脚本,呵呵。

WQL查询的脚本编制

数据查询
实例:列出自动启动但未启动的windows服务
option explicit
dim colwin32svcs
dim objsvc
set colwin32svcs = getobject("winmgmts:{impersonationlevel=impersonate}").execquery("select * from win32_services where started='false' and startmode='auto'")
for each objsvc in colwin32svcs
    wscript.echo objsvc.descripton
next
下面一个例子和上面的例子一样,实现同样的功能
option explicit
dim colwin32assocs
dim objsvc
set colwin32assocs = getobject("winmgmts:{impersonationlevel=impersonate}").execquery("associators of {win32_service.name=""lanmanworkstation""}")
for each objsvc in colwin32assocs
    wscript.echo objsvc.Description
next
结果如下显示:
AT/AT COMPATIBLE
NetworkProvider
Alerter
Background Intelligent Transfer Service
Computer Browser
Messenger
Net Logon
Remote Procedure Call (RPC) Locator



本文转自hcy's workbench博客园博客,原文链接:http://www.cnblogs.com/alterhu/archive/2012/04/11/2442942.html ,如需转载请自行联系原作者。
目录
相关文章
|
4天前
|
云安全 人工智能 安全
|
13天前
|
数据采集 自然语言处理 搜索推荐
基于Qwen3的Embedding和Rerank模型系列,开源!
近年来,随着大规模预训练语言模型(LLM)的飞速发展,文本嵌入(Embedding)和重排序(Reranking)技术在搜索引擎、问答系统、推荐系统等多个领域的重要性愈发凸显。
1092 89
|
6天前
|
自然语言处理 安全 开发者
|
12天前
|
安全 JavaScript 前端开发
Typora免费下载,不需要激活,Typora早期版本,Markdown编辑器
Typora是一款支持实时预览的Markdown编辑器,跨平台兼容Windows、macOS和Linux,适合写作、笔记和技术文档。本文提供合法安全的Typora早期免费版安装方案及常见问题解决方法,助你快速上手。同时详细介绍了Markdown基础用法,包括标题、加粗、斜体、列表、链接、图片、引用、代码块和表格等常用语法,帮助用户高效编写结构化内容。
1085 21
|
12天前
|
人工智能 前端开发 Devops
通义灵码带你玩转开发者常用的MCP(合辑,持续更新中)
今天我们精选了与开发者息息相关和比较热门的MCP 服务,总结了这些技术服务在实际开发的最佳实践,涵盖了从前端开发、后端开发、DevOps、测试、运维等关键环节,及非研发领域中的热度较高的MCP服务。我们通过直播、图文等形式带你了解和学习!
861 5
|
14天前
|
存储 前端开发 JavaScript
2025 最新前端 100 道经典面试题及详细答案汇总整理
本文整理了100道前端常见面试题及其详细答案,涵盖HTML、CSS、JavaScript等多个领域,助你系统复习前端知识。内容包括HTML5新特性、CSS盒模型、Flex与Grid布局区别、选择器优先级等核心知识点,以及伪类和伪元素的区别等细节。适合准备面试或巩固基础的开发者学习。资源可从文末链接下载。
689 2
|
16天前
|
人工智能 Java 决策智能
Spring AI Alibaba Graph:多智能体框架实践
Spring AI Alibaba 是一个面向 Java 开发者的开源人工智能框架,旨在简化 AI 应用开发。本文重点介绍其 Graph 组件,用于解决工作流与多智能体协作问题。Graph 组件通过声明式编程接口,提供统一的上下文管理、消息记忆、人工确认节点等功能,支持复杂 AI 应用的构建。
|
24天前
|
人工智能 API 开发者
一文带你 "看见" MCP 的过程,彻底理解 MCP 的概念
本文介绍了模型上下文协议(MCP)的基本概念、工作原理及其应用过程。MCP 是一种连接 AI 助手与数据系统的开放标准,旨在帮助大模型生成更高质量的响应。文章从 RAG 和 Function Calling 的理论基础出发,详细解析了 MCP 的核心组件(主机、客户端、服务器)及优势,并通过 ModelScope 和 Cherry Studio 实例展示其操作流程。同时,文中指出了 MCP 存在的手动配置复杂、工具稳定性不足等问题,但也强调其作为过渡协议的重要性,为未来智能体间的协同和工具使用提供了方向。
1874 57
一文带你 "看见" MCP 的过程,彻底理解 MCP 的概念
|
2天前
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
119 61

热门文章

最新文章