WMI轻松入门帮助教程基础+进阶一步一步来Word文件下载.docx
- 文档编号:18286942
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:11
- 大小:21.81KB
WMI轻松入门帮助教程基础+进阶一步一步来Word文件下载.docx
《WMI轻松入门帮助教程基础+进阶一步一步来Word文件下载.docx》由会员分享,可在线阅读,更多相关《WMI轻松入门帮助教程基础+进阶一步一步来Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
,你说这到底是叫哪一个小强呢?
张家,李家都是一个姓,一个人的姓实际上就是现实中的一种名字空间。
好了,现在你大声叫“张小强”,我们就明确的知道你到底是叫哪一个小强了。
这就好比在变量名前加上名字空间前缀。
所以可以通俗的说,名字空间就是一个变量的姓氏。
问题是这样我们还会碰到一个问题,世界上有很多姓张的,也有可能有很多的张小强,这怎么办呢?
这时候我们可以这样说"
张老三家的小强"
张是一个名字空间,张老三又是张下面的二级名字空间.
张.老三的家.小强=110
张.三丰的家.小强=119
也许说的更糊涂,但大致就这样吧,我本来也就不是说明这个的。
据微软称,WMI的命名空间共有16个,不过不用担心,我们常用的只有两个:
1、root\cimv2在这个命名空间里包括了绝大多数与计算机、操作系统相关联的类。
2、root\default管理注册表的类
在使用中,我们用一个字符串表示命名空间,就像文件路径一样。
◎WMI轻松入门之二——连接到指定的CIM命名空间2007年07月15日星期日上午01:
13四、常用的脚本对象库
WMI脚本对象库由24个对象组成,在脚本中心有一副脚本库对象模型的图,有兴趣的朋友可以参考一下,作为入门,我们一般只用到其中的四个对象,其继承和层级关系如下:
SwbemLocator教本库对象→SwbemServicesWMI服务对象→SwbemObjectSet类实例集合对象→SwbemObject类的实例
好了,现在让我们来举个例子,详细说明一下这四个对象在脚本中的应用方法:
例一:
用来检索计算机上安装的光驱:
strComputer="
."
SetobjSWbemLocator=CreateObject("
WbemScripting.SWbemLocator"
)
SetobjSWbemServices=objSWbemLocator.ConnectServer
SetcolItems=objSWbemServices.ExecQuery("
Select*fromWin32_CDROMDrive"
ForEachobjItemincolItems
WScript.Echo"
光盘驱动器的类型:
"
&
objItem.Caption
盘符是:
objItem.Id
Next
例二:
用来检索CPU型号
SetobjSWbemObjectSet=objSWbemServices.InstancesOf("
Win32_Processor"
ForEachobjSWbemObjectInobjSWbemObjectSet
Wscript.echo"
CPU的型号为:
"
objSWbemObject.name
请注意,这两个脚本虽然简单,却代表了WMI脚本设计中最普遍的东西,可以说是很典型的脚本。
让我们来仔细观察一下这两个脚本,讨论讨论一下脚本访问WMI的基本方法:
我们可以看到整个脚本的执行过程基本相同:
①定义了SwbemLocator的实例;
SwbemServices、SwbemObjectSet、SwbemObject对象;
创建了SwbemLocator的实例;
②通过SwbemLocator的ConnectServer方法连接到WMI,获得SwbemServices的实例集合;
③枚举集合中的每个实例;
④显示各实例的一些属性。
让我们来详细说明一下各行代码的详细含义,并请仔细回想我们第二部分WMI基本结构中谈到的编写WMI脚本的基本步骤:
(注意:
考虑到脚本的简易,我们编写的脚本一般只在本地计算机进行检索,我们只介绍涉及本地的这一部分,涉及到访问远程计算机的部分我们就省略了,其实随着计算机安全技术的发展,仅凭WMI访问远程计算机的可行性是越来越小了)
1、连接到指定的CIM命名空间
要用WMI对象编程,必须首先创建WMI对象脚本库的实例,连接到目标计算机的CIM命名空间。
方法一:
步骤一、建立SwbemLocator对象的实例。
代码为:
然后用SwbemLocator对象的ConnectServer方法(SwbemLocator对象只有1个只读属性Security_和1个方法ConnectServer)建立WMI服务的连接,返回一个命名空间的连接(SwbemServices对象),代码为:
SetobjSWbemServices=objSWbemLocator.ConnectServer()
ConnectServer方法共有8个参数,所有参数都是可选的,其参数格式如下:
ConnectServer([strComputName],[strNamespace],[strUser],[strPassword],[strLocale],[strAuthority],[iSecurityFlags],[objwbemNamedValueSet])
考虑到WMI的复杂性,在使用中我们如果只是在本地计算机上进行检索和查询,那么我们只需要设置第1、2个参数,其它参数都可以省略;
如果想连接到远程计算机,一般需要对前4个参数进行设置,我们也只对此做个简单的介绍。
strServer——计算机名,缺省为本机,本机也可以用”.”
strNamespace——需要登录的CIM命名空间,例如:
root\CIMV2"
,缺省为"
。
方法二:
用moniker名字法建立WMI服务的连接,这也是微软推荐的连接方法
moniker名字法是利用GetObject函数直接建立WMI服务的连接,它的要点就是通过编写一个moniker字符串作为GetObject函数的参数,然后返回一个SwbemServices对象。
关于moniker字符串的完整格式如下:
winmgmts:
[{SecuritySettings}!
][\\ComputerName][\Namespace][:
ClassName][.KeyProperty='
Value'
]"
是前缀,表示为WMI服务,必须使用;
第二部分用来验证权限和假冒级别的,省略。
第三部分为计算机名字:
\\.\"
是计算机名字,默认可省略,其余同上;
第四部分CIM命名空间:
缺省的命名空间为"
,默认可省略。
第五部分为类名。
第六部分为属性值。
注意:
当该moniker字符串不包括最后2项时(即为:
[\\ComputerName][\Namespace]"
),则GetObject(moniker字符串)返回的是一个命名空间的已验证的连接(SwbemServices对象);
当不包括最后1项时,返回的是一个CIM类(SWbemObject对象);
当包括最后2项时,返回的是一个类的单独实例(SWbemObject对象)。
◎WMI轻松入门之三——获得类的实例2007年07月15日星期日上午01:
152.获得类的实例
我们有4种方法获得类的实例,其中方法1和方法2是通过SwbemServices对象的InstancesOf方法和ExecQuery方法来获得某个类的多个实例组成的集合对象。
方法3和方法4则是返回单独的类的实例,即返回的是一个SWbemObject对象。
1)InstancesOf方法获得类的实例集合
InstancesOf方法的语法参数格式如下:
SwbemServices.InstancesOf(strClass)
strClass为类名,例如"
Win32_Service"
回顾例二,就是用语句:
Win32_Processor"
)来获得"
Win32Processor"
类的所有实例集合,然后我们可以用
……
Next
语句获得每一个类的实例SWbemObject对象,然后就可以根据我们的需要,进行相应的操作。
2)ExecQuery方法获得类的实例集合
与InstancesOf方法不一样的是,ExecQuery方法可以通过查询语句,只返回匹配部分实例和属性。
ExecQuery方法的语法参数格式如下:
SwbemServices.ExecQuery(strQuery)
strQuery为WMI查询语言(WQL)构造的一个查询语句字符串。
例如:
SetobjSWbemObjectSet=objSWbemServices.ExecQuery("
selectProcessorIdfromWin32_ProcessorwhereDeviceID='
cpu0'
3)Get方法获得一个类的实例(SWbemObject对象)
此方法也就不必再用ForEachobjSWbemObjectInobjSWbemObjectSet:
……:
Next语句从SWbemObjectSet对象中获得每一个类的实例SWbemObject对象,Get方法的语法参数格式如下:
SwbemServices.Get([strObjectPath][.KeyProperty='
])
strObjectPath是类的名字
KeyProperty是主键属性名
Value是指定的主键属性值
这里要注意的是如果要获得一个类的实例,则strObjectPath.KeyProperty='
中的任何一项都不能省略,例如:
SetobjSWbemServices=GetObject("
SetobjSWbemObject=objSWbemServices.Get("
Win32_Processor.DeviceID='
Wscript.echo“CPU的型号为”:
objSWbemObject.ProcessorId
看,结果一样,脚本却简化了不少。
4)直接用moniker名字法获得一个类的实例
在说明Moniker名字法的时候我们说过,当包括最后2项时,返回的是一个类的单独实例,如:
SetobjSWbemObject=GetObject("
Wscript.echo"
首枚CPU序列号:
是不是更加简单?
仅仅2条语句就获得了CPU的序列号。
3.读取类的实例属性,调用类的方法
实在是太多了,你可以参照C:
/WINDOWS/system32/wbem/cimwin32.mfl文件中,对所有类的属性和方法的描述。
也可以用下列代码查询,虽然看起来有点困难,不过看的多了也就明白了。
strClass=inputbox("
请输入你要查询的类"
strNameSpace="
root\cimv2"
ConstwbemFlagUseAmendedQualifiers=&
h20000
SetobjWMIService=GetObject("
\\"
strComputer&
\"
strNameSpace)
SetobjClass=objWMIService.Get(strClass,wbemFlagUseAmendedQualifiers)
strMOF=objClass.GetObjectText_
WScript.EchostrMOF
◎WMI脚本:
修改磁盘卷标2007年07月10日星期二下午11:
04'
==========================================================================
'
修改磁盘卷标
在Windows中,WMI主要是一个读取信息的技术,我这样理解不知道对不对
但是我知道绝大多数的类都不允许对其属性进行修改,
Win32_LogicalDisk是我知道的少数允许修改属性的类
当然修改属性完成后不要忘记用Put_方法提交改变
代码很简单就不仔细解释了,当然磁盘卷标不要起的太长
SetobjWMIObject=GetObject("
\root\cimv2"
SetcolDevices=objWMIObject.ExecQuery_
("
Select*fromWin32_LogicalDiskWhereDeviceId='
D:
ForEachobjDeviceincolDevices
objDevice.VolumeName="
工作盘"
objDevice.Put_
建立和删除共享文件夹2007年07月10日星期二下午10:
42'
在局域网建立共享的脚本
GetObject函数用Moniker名字法连接到WMI创建引用在本机有三步
1、"
是前缀,表示为WMI服务,必须
2、\\.\"
代表本机,
3、CIM命名空间:
就是CIM命名空间,缺省可省略
4、建立共享主要使用Win32_Share类的Create函数'
intCreate//0表示成功完成
(StringSharePath;
//共享路径,就是你要共享的文件夹的的路径
StringShareName;
//共享后,访问时的标示名称
IntShareType;
//共享类型,一般赋0即可,表示磁盘共享
IntMaxUsers;
//最大用户数
StringDescription;
//描述
StringPassWord;
//访问密码
)
ConstFILE_SHARE=0
ConstMAXIMUM_CONNECTIONS=25
SetobjNewShare=objWMIService.Get("
Win32_Share"
errReturn=objNewShare.Create_
C:
\Finance"
"
FinanceShare"
FILE_SHARE,_
MAXIMUM_CONNECTIONS,"
PublicsharefortheFinancegroup."
IferrReturn=0ThenMsgBox"
共享文件设置成功!
删除共享用Delete函数,没有任何参数
只要用WQL筛选出符合条件的共享,调用函数就可以了
SetcolShares=objWMIService.ExecQuery_
Select*fromWin32_ShareWhereName='
FinanceShare'
ForEachobjShareincolShares
objShare.Delete
◎转几个WMI脚本,头一个是:
关机、注销或者重启的脚本2007年07月07日星期六下午09:
03'
注销/重起/关闭本地WindowsNT/2000计算机。
基本思路如下:
Win32ShutDown(flag)中flag的参数:
0注销
0+4强制注销
1关机
1+4强制关机
2重起
2+4强制重起
8关闭电源
8+4强制关闭电源
main
submain()
shutdown
endsub
SubShutDown()
DimConnection,WQL,SystemClass,System
SetConnection=GetObject("
WQL="
SelectNameFromWin32_OperatingSystem"
SetSystemClass=Connection.ExecQuery(WQL)
ForEachSystemInSystemClass
System.Win32ShutDown(0+4)
EndSub
收集计算机硬件信息2007年07月07日星期六下午09:
22'
都差不多,脚本中没有列出来的还有:
用户名:
Win32_UserAccount
已经使用的盘符:
Win32_LogicalDisk
所有共享:
Win32_share
所安装的打印机:
Win32_Printer
计算机的主板:
Win32_BaseBoard
1394采集卡:
Win32_1394Controller
笔记本电池:
Win32_Battery
BIOS的:
Win32_BIOS
物理总线的:
Win32_Bus
系统缓存内存:
Win32_CacheMemory
光驱:
Win32_CDROMDrive
Setwmi=GetObject("
msg="
Setcpus=wmi.instancesof("
win32_processor"
msg=msg&
CPU:
ForEachcpuIncpus
msg=msg+cpu.caption&
vbcrlf&
型号为:
ltrim(cpu.name)&
vbCrLf&
vbCrLf
Setmem=wmi.instancesof
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WMI 轻松 入门 帮助 教程 基础 进阶 一步一步