利用WMI获取系统信息Word格式.docx

上传人:b****3 文档编号:18292205 上传时间:2022-12-15 格式:DOCX 页数:6 大小:20.92KB
下载 相关 举报
利用WMI获取系统信息Word格式.docx_第1页
第1页 / 共6页
利用WMI获取系统信息Word格式.docx_第2页
第2页 / 共6页
利用WMI获取系统信息Word格式.docx_第3页
第3页 / 共6页
利用WMI获取系统信息Word格式.docx_第4页
第4页 / 共6页
利用WMI获取系统信息Word格式.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

利用WMI获取系统信息Word格式.docx

《利用WMI获取系统信息Word格式.docx》由会员分享,可在线阅读,更多相关《利用WMI获取系统信息Word格式.docx(6页珍藏版)》请在冰豆网上搜索。

利用WMI获取系统信息Word格式.docx

“状态:

item.Status&

“类型:

item.SystemType&

“生产厂家:

item.Manufacturer&

“型号:

item.Model&

“内存:

~”&

item.totalPhysicalMemory24000&

“mb”&

“域:

item.domain&

vbCrLf"

s=s&

“工作组”&

item.Workgroup&

获得工作组和域的选项不能同时用s=s&

“当前用户:

item.username&

“启动状态”&

item.BootupState&

“该计算机属于”&

item.PrimaryOwnerName&

“系统类型”&

item.CreationClassName&

“计算机类类型”&

item.Description&

vbCrLfFori=0To1"

这里假设安装了两个系统s=s&

Chr(5)&

“启动选项”&

i&

“:

item.SystemStartupOptions(i)_&

vbCrLfNe_tiNe_tTe_t1.Te_t=sEndSub运行程序,点击mand1,在te_tBo_中

就可以显示计算机的信息。

在上面的代码中,程序通过GetObject(“winmgmts:

”)获得WMI对象,然后获得下面的Win32_puterSystem子项并通过访问Win32_puterSystem对象中的分项获得系统中的信息。

需要说明的是,并不是所有的系统都支持WMI,在有些系统中无法显示生产厂家等信息。

现在的计算机以及网络组成十分复杂。

例如系统硬件方面就有主板、硬盘、网卡.。

软件方面有操作系统、系统中安装的软件、正在运行的进程等等。

网络方面有域、工作组等等。

利用WMI可以访问上面的全部信息,但是如果向上面一样的利用分项来访问的话会很麻烦。

为此,WMI提供了一种类似SQL语句的查询语句,可以通过查询语句获得WMI对象下的子项。

下面是一个遍历系统中安装的网卡并返回网卡MAC地址的代码:

PrivateFunctionMACAddressAsStringSetobjs=GetObject(“winmgmts:

”).E_ecQuery(_“SELECTMACAddress”&

_“FROMWin32_workAdapter”&

_“WHERE”&

_“((MACAddressIsNotNULL)”&

_“AND(Manufacturer”&

_“"

Microsoft"

))”)ForEachobjInobjsMACAddress=obj.MACAddressE_itForNe_tobjEndFunction上面的代码获得WMI对象,然后运行E_ecQuery执行一个WMI查询语句获得安装的网卡并返回网卡的MAC地址。

WMI还支持事件处理,让程序可以处理系统事件,例如程序运行、关闭,可移动驱动器的插入、取出等。

下面是一个可以对系统中运行程序进行监控的程序。

首先建立一个新工程,然后点击菜单的project|references项,在references列表中选中MicrosoftWMIScriptingLibrary将WMI对象库加入工程中。

然后在Form1中加入一个ListBo_控件,然后在Form1中加入以下代码:

OptionE_plicitDimLocatorAsSWbemLocatorDimServicesAsSWbemServicesDimWithEventsStatusSinkAsSWbemSinkPrivateSubKillEventsStatusSink.CancelSetStatusSink=NothingEndSubPrivateSubForm_LoadDimQueryAsStringSetStatusSink=NewSWbemSinkSetLocator=CreateObject(“WbemScripting.SWbemLocator”)SetServices=Locator.ConnectServerQuery=“SELECT_FROM__InstanceCreationEvent”Query=Query+“WITHIN1”Query=Query+“WHERETargetInstanceISA"

Win32_Process"

”Services.E_ecNotificationQueryAsyncStatusSink,QueryEndSubPrivateSubStatusSink_OnObjectReady(ByValStatusEventAsSWbemObject,_

ByValEventConte_tAs

SWbemNamedValueSet)DimarrDimstrQueAsStringDimiAsIntegerList1.Cleararr=Split(StatusEvent.GetObjectTe_t_,Chr(10))Fori=LBound(arr)ToUBound(arr)List1.AddItemarr(i)Ne_tiEndSubPrivateSubStatusSink_Onpleted(ByValHResultAsWbemErrorEnum,_

ByValErrorObjectAsSWbemObject,_

ByValEventConte_tAsSWbemNamedValueSet)IfHResultwbemErrCallCancelledThen"

错误处理EndIfEndSub在上面的程序中定义了一个SWbemSink对象StatusSink,然后建立一个SWbemServices对象Server,并将StatusSink连接到Server对象上。

这样就可以通过StatusSink监控程序的运行。

运行程序,然后任意运行一个程序,在Form1的ListBo_中就可以列出运行的程序的信息。

WMI脚本高手不完全手册

20__6-10-0812:

02:

39

要成为WMI脚本高手当要认识一下什么叫WMI啦,下面将介绍一下有关WMI的东西。

Windows管理规范(WindowsManagementInstrumentation)是一项核心的Windows管理技术;

用户可以使用WMI管理本地和远程计算机。

WMI通过编程和脚本语言为日常管理提供了一条连续一致的途径。

用户可以:

1.在远程计算机器上启动一个进程。

2.设定一个在特定日期和时间运行的进程。

3.远程启动计算机。

4.获得本地或远程计算机的已安装程序列表。

5.查询本地或远程计算机的Windows事件日志。

而WMI适用的运得环境也是有些限制的,WMI适用于所有最新版本的Windows。

WMI附带在WindowsMe、Windows20__0、Windows_P和WindowsServer20__3之中。

对于Windows98和WindowsNT4.0,可以访问并搜索“WindowsManagementInstrumentation(WMI)CORE1.5(Windows95/98/NT4.0)”。

注意:

在WindowsNT4.0上安装并运行WMI之前,需要首先安装ServicePack4或更高版本。

WMI需要的其他软件包括:

1.MicrosoftInterE_plorer5.0或更高版本。

2.WindowsscriptHost(WSH)。

Windows20__0、Windows_P、WindowsServer20__3、和WindowsMe附带的WSH,而不是WindowsNT4或Windows98附带的WSH。

您可以从以下地址下载WSHWSH的最新版本--包括在Windows_P和WindowsServer20__3之中--是WSH5.6。

要使WMI脚本可以正常的运行,Windows里的WMI服务(winmgmt)保证是运行的,这样才可以实现WMI里的更多功能。

好了,关于WMI的一些基本的信息资料就说到这,要想看更多的可以到MicroSoft网站的MSDN

找。

下面就简单的讲一下WMI脚本编写的基本要素,看看下面的代码:

//这个脚本是查看系统启动的引导配置参数,下面我们来看看关于WMI脚本编写的架构。

OnErrorResumeNe_t//下面这行是比较重要的,它定义了主机的变量,可以是本机或远程主机,域上的机等,参数英文的“.”是表示本机,要想实现其它机的可以填上其它机的主机名或IP。

strputer=“.”//下面这行是通过GetObject得到主机的WMI对象管理空间“\root\cimv2”,如果是本机的是通过NT(Authentication)认证的,所以可以不用用户名和密码,而对于非本机或非域机的就要再加多几条参数,SetobjWMIService=GetObject(“winmgmts:

\”&

strputer&

“\root\cimv2”)//执行WMI数据对象的查询//至于连接远程的要用下面的语句SetobjLocator=CreateObject(“Wbemscripting.SWbemLocator”)SetobjService=objLocator.ConnectServer(strputer,“root\cimv2”,“administrator”,“a”)SetcolItems=objWMIService.E_ecQuery(“Select_fromWin32_BootConfiguration”,48)

//利用数组列出相关ForEachobjItemincolItemsWscript.Echo“BootDirectory:

objItem.BootDirectoryNe_t从上面的例子可以看出写一个WMI的要求:

1.得到主机的WMI对像管理空间2.执行WMI数据对象的查询3.利用数组列出相关学习编写的架构并不难,只要练多几次就行了,但是学习WMI的第一个难题就是它的子集对象,因为我们并不知道它的子集对象是什么,这样写起程序来就会力不从心了。

要一下子知道这样子集的对象也是不难的,只要在MicroSoft的MSDN找找会有不少,但是这样找下去的话可能要找很久或资料不够全,是不是有些难呢?

其实MicroSoft公司的网站上有一个叫“scriptomatic”的工具,才100多K,解压后你们发觉真正有用的是那个才12k的“scriptomatic.hta”文件,双击打开后你会发觉是一个子集的数据列表,且还有例子呢。

以上就是查询“Win32_BIOS”里的子集参数,是不是很易实现WMI脚本的编写呢?

朋友们,可曾记得大半年前是不是有一个这样的漏洞:

就是一个GUEST用户权限可以用WMI的脚本实现加账号的例子,其实就是一个WMI命名空间的安全性出现问题。

下面我们打开计算机上的MMC看看如何设置WMI的安全权限。

在运行菜单上打“MMC”,然后在“文件”菜单上选“添加/删除管理单元”,然后在“独立”的选项卡(默认)上按“添加”,之后来到“添加独立管理单元”列表。

然后就

一路按“添加”、“确定”就可以了。

返回到MMC的主介面上,然后右击“WMI”单元选“属性”。

在WMI控件属性对话框中单击安全选项卡。

一个名为Root,前面带加号(+)的文件夹将会出现。

如果必要,展开这个树状结构,定位到想要设置权限的命名空间。

单击安全设置按钮。

一组用户和权限显示出来。

如果用户在这个列表中,请按照需要修改权限。

如果用户不再这个列表中,请单击添加按钮,然后从账户所在的位置(本地计算机、域等等)添加用户。

小提示:

为了查看和设置NameSpace安全性,用户必需拥有读取安全设置和编辑安全设置权限。

系统管理员默认具备这些权限,并可以按照需要将权限赋予其他用户如果一个用户需要远程访问命名空间,必须为其选中远程启用权限。

默认情况下,针对一个命名空间设置的用户权限只对该命名空间有效。

如果希望用户可以访问该命名空间和其下所有子命名空间,或者只能访问子命名空间,请单击高级按钮。

单击编辑并在出现的对话框中指定允许访问的范围。

这样就可以防止此类事情的发生,但是透过此类的WMI命名空间的安全设置,也可以成为黑手会配置后门的地方,所以在架建一个安全的系统,这里不能不看。

今天的WMI技术就介绍到这里,文章写得有些仓促,难免有问题,请各位多多指点小弟。

利用GetObject(“WinMgmts:

”)获取系统信息

”)获取系统信息收藏用WMI对象列出系统所有进程:

--Instance.vbs--

DimWMI,objsSetWMI=GetObject(“WinMgmts:

”)Setobjs=WMI.InstancesOf(“Win32_Process”)ForEachobjInobjsEnum1=Enum1+obj.Description+Chr(13)+Chr(10)Ne_tmsgbo_Enum1

获得物理内存的容量:

---physicalMemory.vbs---

strputer=“.”

SetwbemServices=GetObject(“winmgmts:

strputer)SetwbemObjectSet=wbemServices.InstancesOf(“Win32_LogicalMemoryConfiguration”)

ForEachwbemObjectInwbemObjectSetWScript.Echo“物理内存(MB):

CInt(wbemObject.TotalPhysicalMemory/1024)Ne_t

取得系统所有服务及运行状态

--service.vbs--SetServiceSet=GetObject(“winmgmts:

”).InstancesOf(“Win32_Service”)Dims,inforinfor=“”foreachsinServiceSetinfor=infor+s.Description+“==”+s.State+chr(13)+chr(10)ne_tmsgbo_inforCPU的序列号:

---CPUID.vbs---

DimcpuInfocpuInfo=“”setmoc=GetObject(“Winmgmts:

”).InstancesOf(“Win32_Processor”)foreachmoinmoccpuInfo=CStr(mo.ProcessorId)msgbo_“CPUSerialNumberis:

cpuInfone_t

硬盘型号:

---HDID.vbs---DimHDid,mocsetmoc=GetObject(“Winmgmts:

”).InstancesOf(“Win32_DiskDrive”)foreachmoinmocHDid=mo.Modelmsgbo_“硬盘型号为:

HDidne_t

网卡MAC物理地址:

---MACAddress.vbs---Dimmcsetmc=GetObject(“Winmgmts:

”).InstancesOf(“Win32_workAdapterConfiguration”)foreachmoinmcifmo.IPEnabled=truethenmsgbo_“网卡MAC地址是:

mo.MacAddresse_itforendifne_t

测试你的显卡:

OnErrorResumeNe_tDimyeDimye_j00setye_j00=GetObject(“winmgmts:

{impersonationLevel=impersonate}”).InstancesOf(“Win32_VideoController”)foreachyeinye_j00msgbo_“型号:

ye.VideoProcessor&

vbCrLf&

“厂商:

ye.Adapterpatibility&

“名称:

ye.Name&

ye.Status&

“显存:

(ye.AdapterRAM24000)&

“MB”&

“驱动(dll):

ye.InstalledDisplayDrivers&

“驱动(inf):

ye.inf“版本:

ye.DriverVersionne_t

_

“WinMgmts:

”Prefi_MicrosoftWindows20__0ScriptingGuideWMImonikerscanconsistofthreeparts:

onemandatoryponentandtwooptionalponents.Themandatoryponentisthe“winmgmts:

”prefi_.AllWMImonikersmustbeginwith“winmgmts:

”asshownhere:

SetobjSWbemServices=GetObject(“winmgmts:

”)Themonikerinthiscodeisthestring“winmgmts:

”,whichispassedtotheGetObjectfunction.Althoughinthise_lethestringisenteredusingalllowercaseletters,youcanusewhatevercaseyoulike;

thatis,“WinMgmts:

”,“WINMGMTS:

”,and“winmgmts:

”allproducethesameresult.

Specifyingamonikerthatconsistsonlyofthe“winmgmts:

”prefi_isthemostbasicformofWMImonikeryoucanuse.TheresultisalwaysareferencetoanSWbemServicesobject,whichrepresentsaconnectiontotheWindowsManagementInstrumentationserviceonthelocalputer.Underthecovers,the“winmgmts:

”moniker:

1.RetrievestheWMICLSIDfromtheregistrysubkeyHKCR\WINMGMTS\CLSID.TheCLSID({172BDDF8-CEEA-11D1-8B05-00600806D9B6})istheidentifierusedbytheoperatingsystemtomapWMItotheappropriateobject.

2.Retrievesthevaluefromasecondregistryentry,HKCR\CLSID\{172BDDF8-CEEA-11D1-8B05-00600806D9B6}\InProcServer32.Thisvalue(typicallyC:

\Windows\System32\wbem\wbemdisp.dll)indicatesthepathtotheobjectthate_posestheSWbemServicesobject.

3.LoadsWbemdisp.dll,theDLLcontainingtheWMIscriptinglibrarythate_posesSWbemServices.

AfteryouhaveobtainedareferencetoSWbemServices,youcantheninvokeoneoftheobjectmethodsasshownhere:

”)SetcolSWbemObjectSet=objSWbemServices.InstancesOf(“Win32_LogicalDisk”)In

thise_le,areferencevariablenamedobjSWbemServ

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1