基于WMIC和脚本实现对内网终端及设备的信息统计

合集下载

计算机自动化管理中WMI的应用分析

计算机自动化管理中WMI的应用分析

计算机自动化管理中WMI的应用分析WMI(Windows Management Instrumentation)是微软的一种技术,用于管理Windows 操作系统中的各种系统资源。

它提供了一种标准化的方式,使得管理员可以通过脚本或编程语言来管理操作系统、应用程序、网络和其他系统资源。

WMI可以用于监测系统性能、配置系统设置、查询和修改系统信息等多种用途。

在计算机自动化管理中,WMI被广泛应用于对系统资源进行监控、诊断、配置和管理。

本文将对WMI的应用进行分析,并探讨其在计算机自动化管理中的作用。

一、WMI的基本原理WMI是基于CIM(Common Information Model)标准的,它使用了一种称为WMI Provider 的组件来访问和管理系统资源。

WMI Provider可以看作是系统资源的一个“代理”,它通过标准化的接口向外提供系统资源的信息和管理功能。

WMI Provider可以是系统内置的提供程序,也可以是由第三方开发的自定义提供程序。

通过WMI Provider,管理员可以通过WMI接口来查询、监控和管理系统资源。

这种模式使得WMI可以与各种编程语言和脚本语言进行集成,实现对系统资源的灵活管理。

二、WMI的应用场景WMI可以应用于多种计算机自动化管理场景,包括系统监控、软件配置、故障诊断、性能优化等方面。

下面我们将分别介绍WMI在这些方面的应用。

1. 系统监控WMI可以用于监控系统的各种资源使用情况,例如CPU利用率、内存使用情况、磁盘空间、网络流量等。

管理员可以编写脚本或程序来定期查询这些信息,实现对系统运行状况的实时监控。

WMI还支持事件订阅机制,管理员可以利用这一特性来实现对系统事件的实时监控和处理。

2. 软件配置WMI可以用于对系统软件和配置进行管理。

通过WMI接口,管理员可以查询系统中已安装的软件列表,或者进行软件的安装、卸载、更新等操作。

WMI还可以用于修改系统配置参数,如网络设置、服务配置、安全策略等,实现对系统配置的自动化管理。

用vbs实现获取电脑硬件信息的脚本_最新版

用vbs实现获取电脑硬件信息的脚本_最新版

⽤vbs实现获取电脑硬件信息的脚本_最新版代码⼀:'*******************************************************************************************'Version:3.1' 调整错误处理⽅法,错误信息输出到LogFile⽂件,可以查看扫描失败原因' 如果出现“RPC 服务器不可⽤”错误,是因为远程主机没开机' 如果出现“RPC 服务器不可⽤”之外的错误,可能是由于正在运⾏的程序造成,请你把此信息告诉我' 重启后再次扫描就可以排除⾮“RPC 服务器不可⽤。

”的错误' 如果扫描到的硬件信息为空,应该是驱动问题(或BIOS不完善),请⾃⾏解决'Version:3.0' 增加输出BIOS的发⾏⽇期,和主板信息放在⼀起'Version:2.9' 修正所有GetInfo过程遇错的处理⽅法,避免返回的数组上限不符合输出要求导致脚本报错。

' 之所以为出现这种情况,是因为Win32类检索不到硬件或连接到Win32类失败;' 原来判断是否出现Err,忽略了检索不到硬件的情况(连接成功⽆Err,Count为0)' 检索不到硬件多数是因为驱动没装好'Version:2.8' 增加GetIDEProtocol过程,获取IDE控制器使⽤的协议,只是增加了代码,没有调⽤' 计划增加检索其它存储器控制器的过程'Version:2.7' 检索硬盘/显卡/⽹卡/声卡的过程增加 DeviceID 属性(设备标识符)' 此属性不被输出,⽤于脚本内部判断'Version:2.6' 原来输出搜索到的第⼀个硬盘' 改为输出搜索到的第⼀个InterfaceType属性为IDE的硬盘的信息'Version:2.5' 增加Sort过程,排序硬件信息'Version:2.4' 调整输出信息的分类,同类信息尽可能的只使⽤⼀个逗号分隔,以便导⼊xls后在同⼀列' 查询到的硬件信息如果是空或0,有可能是相关驱动不完善或未定义此信息,也可能是未安装驱动' 因为WMI查询就代表了系统知道这些硬件的详细信息,查不到信息就是系统不知道' 系统不知道硬件的详细信息,代表着性能可能有所缺失,建议找个好驱动安装' 值得注意的是主板驱动' (为了更容易理解,此版本的升级信息被编辑过)'Version:2.3' 取消2.2版增加输出的硬盘接⼝类型' 由于STAT也归于IDE接⼝,这会导致误解' PS:脚本只输出搜索到的第⼀个硬盘'Version:2.2' GetMemoryInfo过程增加MemoryType、FormFactor、TypeDetail三个属性' 输出增加内存类型、封装类型' 输出增加硬盘容量、接⼝类型'Version:2.1' GetOSInfo过程增加去掉Caption属性中带有的逗号“,”的代码' 原因:在检测2003系统时,读取到的Caption属性,带有逗号“,”' 这会影响输出,因为输出是以逗号“,”为分隔符的'Version:2.0 B5发布版' GetNetworkInfo过程改为使⽤MACAddress属性⾮空、' Manufacturer属性⾮"Microsoft"判断⽹卡'Version:2.0 Beta4' GetNetworkInfo过程使⽤NetConnectionStatus属性判断⽹络适配器' NetConnectionStatus属性表明连接状态(2000系统不⽀持此属性)' 物理⽹络适配器才具有此状态(包括停⽤状态在内)'Version:2.0 Beta3' GetNetworkInfo过程增加⼀个判断' 忽略读取IPAddress(0)时会产⽣Err类型数据的适配器(对战平台)'Version:2.0 Beta2' GetOSInfo过程原来使⽤的Name、ServicePackMajorVersion属性' 改为使⽤Caption、CSDVersion属性' 所有GetInfo过程增加错误处理代码,避免正在扫描的时候' 脚本遇到运⾏时错误导致脚本退出'Version:2.0 Beta1' 增加扫描失败记录,再次运⾏脚本只读取失败记录,忽略配置信息'Version:1.1' GetNetworkInfo过程增加⼀个判断' 忽略NetConnectionID属性(接⼝名称)为空的适配器'Version:1.0' 初始版本''E-Mail:lzmyst@'你可以任意编辑、引⽤脚本的全部或部分代码'转贴、引⽤脚本的全部或部分代码请保留版权'**************************************'********************************说明开始*************************************'Input格式:起始IP-数量=⽤户名=密码;起始计算机名-数量=⽤户名=密码' 多个配置项⽤“;”隔开'例:192.168.0.1-10指明IP范围为192.168.0.1~192.168.0.10,⽀持跨⽹段'例:PC001-10指明范围为PC001~PC010(计算机名可以包含-号)'与指定格式不相同的,默认为单IP[计算机名],也可以在"未扫描的计算机.txt"⾥配置'"硬件信息.txt"是以逗号分隔各项硬件信息,你需要⾃⼰导⼊XLS整理、精简'未扫描到的计算机,会把机号、⽤户名、密码保存到"未扫描的计算机.txt"'再次运⾏脚本将只读取"未扫描的计算机.txt"⾥的信息(如果存在并且⼤⼩不为0)'********************************说明结束*************************************Dim Input, InfoOutFile, LogFile '请按格式给Input赋值'Input = "pc021=administrator=cylslynetbar"Input = "PC001-109=administrator=cylslynetbar;pc110-85=administrator=LYjfnetbaradmin"InfoOutFile = "硬件信息.txt"LogFile = "未扫描的计算机.txt"Redim arrConfig(0)Dim WshShell, FSO, intCount1, intCount2intCount1 = 0intCount2 = 0Set WshShell = WScript.CreateObject("WScript.Shell")Set FSO = WScript.Createobject("Scripting.Filesystemobject")ReadConfigWshShell.Popup "扫描过程会很慢,请耐⼼等待,完成后会给出提⽰",,"扫描开始"LinkRemoteServer arrConfigDim LenNum1, LenNum2If intCount1 > intCount2 ThenLenNum1 = 0LenNum2 = Len(intCount1) - Len(intCount2)ElseLenNum1 = Len(intCount2) - Len(intCount1)LenNum2 = 0End IfSort InfoOutFileWshShell.Popup "扫描结果:" & _vbCrLf & vbTab & "扫描成功:" & Space(LenNum1) & intCount1 & " 台" & _vbCrLf & vbTab & "扫描失败:" & Space(LenNum2) & intCount2 & " 台" & _vbCrLf & "扫描失败的电脑已做记录,再次运⾏脚本只扫描记录⾥的电脑",,"扫描完成" Function ReadConfigDim objMatches, objMatche,objLogFile, arrLog, intUBarrConfigIf FSO.FileExists(LogFile) ThenIf FSO.GetFile(LogFile).Size = 0 ThenSet objMatches = GetMatche("([^;=]+)=([^;=]+)=([^;=]+)", Input)For Each objMatche In objMatchesGetConfig objMatche.SubMatches(0), objMatche.SubMatches(1), objMatche.SubMatches(2) NextIf objMatches.Count = 0 ThenMsgbox "配置信息格式不正确,请修改"WScript.QuitEnd IfElseSet objLogFile = FSO.OpenTextFile(LogFile)Do Until objLogFile.AtEndOfStreamarrLog = Split(objLogFile.ReadLine,"=")intUBarrConfig = ((Ubound(arrConfig)+1)\3+1)*3-1Redim Preserve arrConfig(intUBarrConfig)arrConfig(intUBarrConfig-2) = arrLog(0)arrConfig(intUBarrConfig-1) = arrLog(1)arrConfig(intUBarrConfig-0) = arrLog(2)LoopEnd IfElseSet objMatches = GetMatche("([^;=]+)=([^;=]+)=([^;=]+)", Input)For Each objMatche In objMatchesGetConfig objMatche.SubMatches(0), objMatche.SubMatches(1), objMatche.SubMatches(2)WScript.QuitEnd IfEnd IfEnd Function'*********************************************************************************'⽬的:连接到远程主机的WMI命名空间'输⼊:arrArray数组,包含有计算机名[IP]、⽤户名、密码'调⽤:LinkServer过程' 如果返回SWbemLocator对象ConnectServer⽅法的实例,调⽤OutInfo过程' 如果返回Err信息(字符串类型),输出计算机名[IP]、⽤户名、密码及错误信息到LogFile⽂件' OutInfo过程' 如果返回Err信息(字符串类型)输出计算机名[IP]、⽤户名、密码及错误信息到LogFile⽂件'传递:SWbemLocator对象ConnectServer⽅法的实例传递给OutInfo过程' 计算机名[IP]、命名空间、⽤户名、密码传递给LinkServer过程'*********************************************************************************Function LinkRemoteServer(arrArray)Dim objErrLog, E, objLinkServer, objConnection, objWbemLocator, objErrSet objWbemLocator = CreateObject("WbemScripting.SWbemLocator")Set objErrLog = FSO.CreateTextFile(LogFile,True)For E = 0 To Ubound(arrArray) Step 3Set objLinkServer = LinkServer(arrConfig(E),"root\cimv2",arrConfig(E+1),arrConfig(E+2))If Err ThenobjErrLog.Writeline arrArray(E) & "=" & arrArray(E+1) & "=" & arrArray(E+2) & "=" & _"错误编号:" & CStr(Err.Number) & _",错误原因:" & CStr(Err.Description) & _",错误来源:" & CStr(Err.Source) & " By LinkServer Function"intCount2 = intCount2 + 1Err.ClearElseobjErr = OutInfo(objLinkServer)If Vartype(objErr) = 8 ThenobjErrLog.Writeline arrArray(E) & "=" & arrArray(E+1) & "=" & arrArray(E+2) & "=" & objErrintCount2 = intCount2 + 1End IfEnd IfNextEnd Function'******************************************************'⽬的:输出硬件信息'输⼊:SWbemLocator对象ConnectServer⽅法的实例'调⽤:获取硬件信息的GetXXXInfo过程'传递:SWbemLocator对象ConnectServer⽅法的实例'返回:所有调⽤的GetInfo过程都未返回Err对象,则返回True' 某个GetInfo过程返回Err对象,则返回False'******************************************************Function OutInfo(objRemote)Dim OutFile, arrInfo, strOutInfo, Tmp, AIf FSO.FileExists(InfoOutFile) ThenSet OutFile = FSO.OpenTextFile(InfoOutFile,8)ElseSet OutFile = FSO.CreateTextFile(InfoOutFile)OutFile.Writeline "计算机名,系统(初装⽇期),主板型号(⼚商)(发⾏⽇期),CPU型号(接⼝类型),外频,L2容量(速度)," & _ "内存总量,内存速度(位置),内存类型(封装类型),硬盘型号(容量),显卡型号(显存),⽹卡,IP/MAC"End If'系统arrInfo = GetOSInfo(objRemote)If Vartype(arrInfo) = 8 ThenOutInfo = arrInfoExit FunctionEnd IfstrOutInfo = arrInfo(0) & "," & arrInfo(1) & "(" & arrInfo(2) & "),"'主板arrInfo = GetBoardInfo(objRemote)If Vartype(arrInfo) = 8 ThenOutInfo = arrInfoExit FunctionEnd IfstrOutInfo = strOutInfo & arrInfo(0) & "(" & arrInfo(1) & ")"'BIOSarrInfo = GetBIOSInfo(objRemote)End IfstrOutInfo = strOutInfo & "(" & arrInfo(2) & "),"'CPUarrInfo = GetCPUInfo(objRemote)If Vartype(arrInfo) = 8 ThenOutInfo = arrInfoExit FunctionEnd IfstrOutInfo = strOutInfo & arrInfo(1) & "(" & arrInfo(8) & ")," & arrInfo(4) & "," & _arrInfo(6) & "(" & arrInfo(7) & "),"'内存arrInfo = GetMemoryInfo(objRemote)If Vartype(arrInfo) = 8 ThenOutInfo = arrInfoExit FunctionEnd IfTmp = 0For A = 1 To Ubound(arrInfo) Step 6Tmp = Tmp + Cint(arrInfo(A))NextstrOutInfo = strOutInfo & arrInfo(0) & "条,共" & Tmp & "M,"Tmp = ""For A = 2 To Ubound(arrInfo) Step 6If A = Ubound(arrInfo) - 4 ThenTmp = Tmp & arrInfo(A) & "(" & arrInfo(A+1) & "),"ElseTmp = Tmp & arrInfo(A) & "(" & arrInfo(A+1) & ") "End IfNextstrOutInfo = strOutInfo & TmpTmp = ""For A = 4 To Ubound(arrInfo) Step 6If A = Ubound(arrInfo) - 2 ThenTmp = Tmp & arrInfo(A) & "(" & arrInfo(A+1) & "),"ElseTmp = Tmp & arrInfo(A) & "(" & arrInfo(A+1) & ") "End IfNextstrOutInfo = strOutInfo & Tmp'硬盘Tmp = ""arrInfo = GetDiskInfo(objRemote)If Vartype(arrInfo) = 8 ThenOutInfo = arrInfoExit FunctionEnd IfFor A = 1 To Ubound(arrInfo) Step 5If arrInfo(A+1) = "IDE" ThenTmp = arrInfo(A) & "(" & arrInfo(A+2) & "G),"Exit ForEnd IfNextIf Tmp = "" ThenstrOutInfo = strOutInfo & "硬盘型号未检索到,"ElsestrOutInfo = strOutInfo & TmpEnd If'显卡arrInfo = GetVideoInfo(objRemote)If Vartype(arrInfo) = 8 ThenOutInfo = arrInfoExit FunctionEnd IfstrOutInfo = strOutInfo & arrInfo(0) & "(" & arrInfo(1) & "M),"'⽹卡arrInfo = GetNetworkInfo(objRemote)If Vartype(arrInfo) = 8 ThenOutInfo = arrInfoExit FunctionEnd IfstrOutInfo = strOutInfo & arrInfo(1) & "," & arrInfo(2) & Space(17-Len(arrInfo(2))) & arrInfo(3) '输出OutFile.Writeline strOutInfo'*********************************************************'⽬的:连接到远程主机的WMI命名空间'输⼊:strComputer:远程主机的计算机名或IP' strNamespace:命令空间' strUserName:⽤户名' strPassword:密码'返回:连接成功,返回SWbemLocator类连接远程主机后的对象的实例' 连接失败,返回错误对象'*********************************************************Function LinkServer(strComputer,strNamespace,strUserName,strPassword) Dim objWbemLocatorSet objWbemLocator = CreateObject("WbemScripting.SWbemLocator")Dim objConnectionOn Error Resume NextSet objConnection = objwbemLocator.ConnectServer _(strComputer, strNamespace, strUserName, strPassword)If Err ThenSet LinkServer = ErrExit FunctionEnd IfOn Error Goto 0objConnection.Security_.ImpersonationLevel = 3Set LinkServer = objConnectionEnd Function'******************************************'⽬的:正则表达式'输⼊:strPatrn:正则表达式模式' strString:要执⾏正则表达式的字符串'返回:Match对象'******************************************Function GetMatche(strPatrn, strString)Dim RegExSet RegEx = New RegexpRegEx.Global = TrueRegEx.IgnoreCase =TrueRegEx.Pattern = strPatrnSet GetMatche = RegEx.Execute(strString)End Function'***************************************'⽬的:2、8、16进制转10进制'输⼊:strString:2、8、16进制数' intNum:进制(2|8|16)'返回:10进制数'***************************************Function ChangeToDecimal(strString, intNum)ChangeToDecimal = 0If Isnull(strString) Then ChangeToDecimal = 0 : Exit FunctionDim A, MFor A = 1 To Len(strString)M = LCase(Mid(strString, A, 1))Select Case MCase "a" :M = 10Case "b" :M = 11Case "c" :M = 12Case "d" :M = 13Case "e" :M = 14Case "f" :M = 15End SelectChangeToDecimal = ChangeToDecimal + M * intNum^(Len(strString)-A) NextEnd Function'*******************************************************'⽬的:分析配置信息'输⼊:strIP, strUser, strPW:IP[计算机名]、账户、密码'返回:⽆,直接把分析结果保存在数组'*******************************************************Function GetConfig(strIP, strUser, strPW)Dim Matches, SubMatcheDim IP_1, IP_2, IP_3, IP_4, intStar, intEnd, A, intConfigNumIf Matches.Count = 1 ThenSet SubMatche = Matches(0)intStar = Cint(SubMatche.SubMatches(3))intEnd = intStar + Cint(SubMatche.SubMatches(4)) - 1For A = intStar To intEndIP_4 = A Mod 256IP_3 = (Cint(SubMatche.SubMatches(2))+ A\256) Mod 256IP_2 = (Cint(SubMatche.SubMatches(1)) + (Cint(SubMatche.SubMatches(2))+ A\256)\256) Mod 256 IP_1 = Cint(SubMatche.SubMatches(0)) + (Cint(SubMatche.SubMatches(1)) + _(Cint(SubMatche.SubMatches(2))+ A\256)\256)\256If IP_1 > 223 Or IP_1 = 127 Or IP_1 < 1 ThenMsgbox strIP & "包含的" & IP_1 & "." & IP_2 & "." & IP_3 & "." & IP_4 & _"不是有效IP,此IP及之后的IP已被丢弃"Exit FunctionEnd IfintConfigNum = (Ubound(arrConfig)+1)\3 + 1Redim Preserve arrConfig(intConfigNum*3-1)arrConfig(intConfigNum*3-3) = IP_1 & "." & IP_2 & "." & IP_3 & "." & IP_4arrConfig(intConfigNum*3-2) = strUserarrConfig(intConfigNum*3-1) = strPWNextExit FunctionEnd IfDim ComputerName_Patrn, Prefix, intLenComputerName_Patrn = "([\S]+[^0-9]{1})([0]*[\d]+)-([\d]+)"Set Matches = GetMatche(ComputerName_Patrn, strIP)If Matches.Count = 1 ThenSet SubMatche = Matches(0)Prefix = SubMatche.SubMatches(0)intLen = Len(SubMatche.SubMatches(1))intStar = Cint(SubMatche.SubMatches(1))intEnd = intStar + Cint(SubMatche.SubMatches(2)) - 1For A = intStar To intEndintConfigNum = (Ubound(arrConfig)+1)\3 + 1Redim Preserve arrConfig(intConfigNum*3-1)If Len(A) < intLen ThenarrConfig(intConfigNum*3-3) = Prefix & String(intLen-Len(A),"0") & AElsearrConfig(intConfigNum*3-3) = Prefix & AEnd IfarrConfig(intConfigNum*3-2) = strUserarrConfig(intConfigNum*3-1) = strPWNextExit FunctionEnd IfintConfigNum = (Ubound(arrConfig)+1)\3 + 1Redim Preserve arrConfig(intConfigNum*3-1)arrConfig(intConfigNum*3-3) = strIParrConfig(intConfigNum*3-2) = strUserarrConfig(intConfigNum*3-1) = strPWEnd Function'***********************************************************'⽬的:获取操作系统信息'输⼊:SWbemLocator对象ConnectServer⽅法连接到远程主机的实例'返回:数组,上限为2' 取操作系统的3种属性:' 0 1 2' CSName Caption&CSDVersion InstallDate' 计算机名系统名&SP版本初装⽇期'LastBootUpTime属性表⽰系统最近⼀次的启动时间'***********************************************************Function GetOSInfo(objConnection)Dim arrOSInfoDim objSystemInfos, objSystemInfo, arrOS(2)Dim TmpOn Error Resume NextSet objSystemInfos = objConnection.InstancesOf("win32_operatingsystem")If Err ThenGetOSInfo = "错误编号:" & CStr(Err.Number) & _",错误原因:" & CStr(Err.Description) & _",错误来源:" & CStr(Err.Source) & " By GetOSInfo Function"Err.ClearTmp = objSystemInfos.CountIf Err ThenGetOSInfo = "错误编号:" & CStr(Err.Number) & _",错误原因:" & CStr(Err.Description) & _",错误来源:" & CStr(Err.Source) & " By GetOSInfo Function"Err.ClearOn Error Goto 0Exit FunctionEnd IfFor Each objSystemInfo In objSystemInfosarrOS(0) = objSystemInfo.CSNamearrOS(1) = Replace(objSystemInfo.Caption,",","") & " " & objSystemInfo.CSDVersion arrOS(2) = Mid(CStr(objSystemInfo.InstallDate),1,4) & "-" & _Mid(CStr(objSystemInfo.InstallDate),5,2) & "-" & _Mid(CStr(objSystemInfo.InstallDate),7,2) '& ", " & _'Mid(CStr(objSystemInfo.InstallDate),9,2) & ":" & _'Mid(CStr(objSystemInfo.InstallDate),11,2) & ":" & _'Mid(CStr(objSystemInfo.InstallDate),13,2)NextIf Err ThenGetOSInfo = "错误编号:" & CStr(Err.Number) & _",错误原因:" & CStr(Err.Description) & _",错误来源:" & CStr(Err.Source) & " By GetOSInfo Function"Err.ClearOn Error Goto 0Exit FunctionEnd IfGetOSInfo = arrOSOn Error Goto 0End Function'***********************************************************'⽬的:获取主板信息'输⼊:SWbemLocator对象ConnectServer⽅法连接到远程主机的实例'返回:数组,上限为2' 取主板的3种属性:' 0 1 2' Product Manufacturer Version' 型号⼚商版本'***********************************************************Function GetBoardInfo(objConnection)Dim objboards, objboard, arrBoard(2)Dim TmpOn Error Resume NextSet objboards = objConnection.InstancesOf("Win32_BaseBoard")If Err ThenGetBoardInfo = "错误编号:" & CStr(Err.Number) & _",错误原因:" & CStr(Err.Description) & _",错误来源:" & CStr(Err.Source) & " By GetBoardInfo Function"Err.ClearOn Error Goto 0Exit FunctionEnd IfTmp = objboards.CountIf Err ThenGetBoardInfo = "错误编号:" & CStr(Err.Number) & _",错误原因:" & CStr(Err.Description) & _",错误来源:" & CStr(Err.Source) & " By GetBoardInfo Function"Err.ClearOn Error Goto 0Exit FunctionEnd IfFor each objboard In objboardsarrBoard(0) = Replace(Trim(objboard.Product),",","") '型号arrBoard(1) = Replace(Trim(objboard.Manufacturer),",","") '⼚商arrBoard(2) = Replace(Trim(objboard.Version),",","") '版本NextIf Err ThenGetBoardInfo = "错误编号:" & CStr(Err.Number) & _",错误原因:" & CStr(Err.Description) & _",错误来源:" & CStr(Err.Source) & " By GetBoardInfo Function"Err.ClearOn Error Goto 0On Error Goto 0End Function'***********************************************************'⽬的:获取BIOS信息'输⼊:SWbemLocator对象ConnectServer⽅法连接到远程主机的实例'返回:数组,上限为2' 取BIOS的2种属性:' 0 1 2' Manufacturer SMBIOSBIOSVersion ReleaseDate' ⼚商版本发⾏⽇期'***********************************************************Function GetBIOSInfo(objConnection)Dim objBIOSs, objBIOS, arrBIOS(2)Dim TmpOn Error Resume NextSet objBIOSs = objConnection.InstancesOf("Win32_BIOS")If Err ThenGetBIOSInfo = "错误编号:" & CStr(Err.Number) & _",错误原因:" & CStr(Err.Description) & _",错误来源:" & CStr(Err.Source) & " By GetBIOSInfo Function"Err.ClearOn Error Goto 0Exit FunctionEnd IfTmp = objBIOSs.CountIf Err ThenGetBIOSInfo = "错误编号:" & CStr(Err.Number) & _",错误原因:" & CStr(Err.Description) & _",错误来源:" & CStr(Err.Source) & " By GetBIOSInfo Function"Err.ClearOn Error Goto 0Exit FunctionEnd IfFor each objBIOS In objBIOSsIf Isnull(objBIOS.Manufacturer) ThenarrBIOS(0) = "BIOS⼚商不存在" '请检查主板驱动是否完善或未安装,或BIOS不完善需要刷BIOSElsearrBIOS(0) = Replace(Trim(objBIOS.Manufacturer),",","")End IfIf Isnull(objBIOS.SMBIOSBIOSVersion) ThenarrBIOS(1) = "由SMBIOS汇报的BIOS版本不存在" '请检查主板驱动是否完善或未安装,或BIOS不完善需要刷BIOS ElsearrBIOS(1) = Replace(Trim(objBIOS.SMBIOSBIOSVersion),",","")End IfIf Isnull(objBIOS.ReleaseDate) ThenarrBIOS(2) = "BIOS发⾏⽇期未知" '请检查主板驱动是否完善或未安装,或BIOS不完善需要刷BIOSElsearrBIOS(2) = Left(Cstr(objBIOS.ReleaseDate),8)End IfNextIf Err ThenGetBIOSInfo = "错误编号:" & CStr(Err.Number) & _",错误原因:" & CStr(Err.Description) & _",错误来源:" & CStr(Err.Source) & " By GetBIOSInfo Function"Err.ClearOn Error Goto 0Exit FunctionEnd IfGetBIOSInfo = arrBIOSOn Error Goto 0End Function'************************************************************'⽬的:获取CPU信息'输⼊:SWbemLocator对象ConnectServer⽅法连接到远程主机的实例'返回:数组,上限为8' 取CPU的9种属性:' 0 1 2 3 4' Name MaxClockSpeed CurrentVoltage ExtClock' 核⼼数量型号主频电压外频' 5 6 7 8' AddressWidth L2CacheSize L2CacheSpeed SocketDesignationDim objCPU, objCPUs, arrCPU(8)On Error Resume NextSet objCPUs = objConnection.InstancesOf("win32_processor")If Err ThenGetCPUInfo = "错误编号:" & CStr(Err.Number) & _",错误原因:" & CStr(Err.Description) & _",错误来源:" & CStr(Err.Source) & " By GetCPUInfo Function"Err.ClearOn Error Goto 0Exit FunctionEnd IfarrCPU(0) = objCPUs.Count '每个CPU核⼼都返回⼀个实例,实例数量即为CPU核⼼数量 If Err ThenGetCPUInfo = "错误编号:" & CStr(Err.Number) & _",错误原因:" & CStr(Err.Description) & _",错误来源:" & CStr(Err.Source) & " By GetCPUInfo Function"Err.ClearOn Error Goto 0Exit FunctionEnd IfFor each objCPU In objCPUsarrCPU(1) = Replace(Trim(),",","") '型号arrCPU(2) = objCPU.MaxClockSpeed '主频arrCPU(3) = ChangeToDecimal(objCPU.CurrentVoltage, 16)/10 '电压arrCPU(4) = objCPU.ExtClock '外频arrCPU(5) = objCPU.AddressWidth '位宽arrCPU(6) = objCPU.L2CacheSize 'L2容量arrCPU(7) = objCPU.L2CacheSpeed 'L2频率arrCPU(8) = objCPU.SocketDesignation '插槽类型NextIf Err ThenGetCPUInfo = "错误编号:" & CStr(Err.Number) & _",错误原因:" & CStr(Err.Description) & _",错误来源:" & CStr(Err.Source) & " By GetCPUInfo Function"Err.ClearOn Error Goto 0Exit FunctionEnd IfGetCPUInfo = arrCPUOn Error Goto 0End Function'********************************************************************************************'⽬的:获取内存信息'输⼊:SWbemLocator对象的ConnectServer⽅法连接到远程主机的实例'返回:数组,上限为(内存条的数量*6),0=内存条的数量' 取内存的6种属性:' 1 2 3 4 5 6' capacity Speed DeviceLocator MemoryType FormFactor TypeDetail' 容量速度插槽位置内存类型封装(接⼝)类型详细类型-系统应⽤类型'DeviceLocator属性表⽰这个内存所在的插槽' ⼀般是字符加数字,数字相当于主板上内存插槽的物理位置'******************************************************************************************** Function GetMemoryInfo(objConnection)Dim objMemorys, objMemory, NumRedim arrMemory(0)On Error Resume NextSet objMemorys = objConnection.InstancesOf("Win32_PhysicalMemory")If Err ThenGetMemoryInfo = "错误编号:" & CStr(Err.Number) & _",错误原因:" & CStr(Err.Description) & _",错误来源:" & CStr(Err.Source) & " By GetMemoryInfo Function"Err.ClearOn Error Goto 0Exit FunctionEnd IfarrMemory(0) = objMemorys.Count '每条内存都返回⼀个实例,实例项数即内存条数量 If Err ThenGetMemoryInfo = "错误编号:" & CStr(Err.Number) & _",错误原因:" & CStr(Err.Description) & _",错误来源:" & CStr(Err.Source) & " By GetMemoryInfo Function"Err.ClearOn Error Goto 0For Each objMemory In objMemorysNum = Num + 1Redim Preserve arrMemory(Num*6)arrMemory(Num*6-5) = objMemory.capacity/1048576 '容量(M)arrMemory(Num*6-4) = objMemory.Speed '速度(MHz)arrMemory(Num*6-3) = objMemory.DeviceLocator '插槽位置Select Case objMemory.MemoryType '内存类型,Case 0 :arrMemory(Num*6-2) = "Unknown" '未知Case 1 :arrMemory(Num*6-2) = "Other" '其它Case 2 :arrMemory(Num*6-2) = "DRAM" '动态随机存储器Case 3 :arrMemory(Num*6-2) = "Synchronous DRAM" '同步动态随机存储器Case 4 :arrMemory(Num*6-2) = "Cache DRAM" '同步缓存动态随机存储器,三菱专利技术,插⼊⼀个SRAM作为⼆级CACHE使⽤ Case 5 :arrMemory(Num*6-2) = "EDO" '外扩充数据模式存储器(Extended Date Out)Case 6 :arrMemory(Num*6-2) = "EDRAM" '增强型动态随机存储器,在DRAM中包括了⼀⼩部分的SRAM(Enhanced DRAM) Case 7 :arrMemory(Num*6-2) = "VRAM" '视频存储器,专门为图形应⽤优化的存储器(Video DRAM)Case 8 :arrMemory(Num*6-2) = "SRAM" '静态随机存储器Case 9 :arrMemory(Num*6-2) = "RAM" '随机存储器Case 10 :arrMemory(Num*6-2) = "ROM" '只读存储器Case 11 :arrMemory(Num*6-2) = "Flash" '闪速存储器,简称闪存(Flash Memory),属于EEPROM(电擦除可编程只读存储器)类型 Case 12 :arrMemory(Num*6-2) = "EEPROM" '电可擦写可编程只读存储器Case 13 :arrMemory(Num*6-2) = "FEPROM" 'F什么可擦写可编程只读存储器Case 14 :arrMemory(Num*6-2) = "EPROM" '可擦写可编程只读存储器(Erasable Programmable ROM)Case 15 :arrMemory(Num*6-2) = "CDRAM" '同步缓存动态随机存储器,即Cache DRAMCase 16 :arrMemory(Num*6-2) = "3DRAM" '3维视频处理器专⽤存储器(3 DIMESION RAM)Case 17 :arrMemory(Num*6-2) = "SDRAM" '同步动态随机存储器,即Synchronous DRAMCase 18 :arrMemory(Num*6-2) = "SGRAM" '单⼝随机存储器(Signal RAM)Case 19 :arrMemory(Num*6-2) = "RDRAM" '总线式动态随机存储器Case 20 :arrMemory(Num*6-2) = "DDR" '双倍速率同步动态随机存储器,⼀个时钟周期内传输⼆次数据Case 21 :arrMemory(Num*6-2) = "DDR-2" '双倍速率同步动态随机存储器2,⼀个时钟周期内传输⼆次数据,4bit数据预读取能⼒ End SelectSelect Case objMemory.FormFactor '封装类型(接⼝类型)Case 0 :arrMemory(Num*6-1) = "Unknown" '未知Case 1 :arrMemory(Num*6-1) = "Other" '其它Case 2 :arrMemory(Num*6-1) = "SIP" '单列直插式封装Case 3 :arrMemory(Num*6-1) = "DIP" '双列直插式封装(Dual ln-line Package)Case 4 :arrMemory(Num*6-1) = "ZIP" '零插拔⼒封装(Zero Insertion Package)Case 5 :arrMemory(Num*6-1) = "SOJ" '⼩尺⼨(⼩外形)J形引脚封装(Small Out-Line J-Lead)Case 6 :arrMemory(Num*6-1) = "Proprietary" '专有封装(有专利权的)Case 7 :arrMemory(Num*6-1) = "SIMM" '单列直插式封装(Single Inline Memory Module)Case 8 :arrMemory(Num*6-1) = "DIMM" '双列直插式封装(Dual Inline Memory Module)Case 9 :arrMemory(Num*6-1) = "TSOP" '薄型⼩尺⼨封装(Thin Small Outline Package)Case 10 :arrMemory(Num*6-1) = "PGA" '陈列引脚封装。

扫描局域网硬件信息的 VBS

扫描局域网硬件信息的 VBS

扫描局域网硬件信息的 VBS2009-03-12 14:22扫描局域网硬件信息的 VBS==================================================================== ===='本脚本的功能是检测硬件的信息.On Error Resume Nexttemp=0set wshshell=wscript.createobject("wscript.shell")'启动WMI服务wshshell.run ("%comspec% /c regsvr32 /s scrrun.dll"),0,True wshshell.run ("%comspec% /c sc config winmgmt start= auto"),0,True wshshell.run ("%comspec% /c net start winmgmt"),0strComputer = "."Set objWMIService = Getobject("winmgmts:\\" & strComputer &"\root\cimv2")'用一个文本来记录硬件信息Set WshNetwork = WScript.Createobject("work") computername=puterNameset fso=createobject("scripting.filesystemobject")tempfilter=("\\saves\11\kk\"& computername &".txt")set tempfile=fso.createtextfile(tempfilter)'主板set board =objwmiservice.execQuery("select * from win32_baseboard") for each item in boardboard2="主板: " & item.Productnexttempfile.writeline(board2)'CPUset cpu =objwmiservice.execQuery("select * from win32_processor") for each item in cpucpu2= "CPU : " & nexttempfile.writeline(cpu2)'内存Set colItems = objWMIService.ExecQuery("Select * fromWin32_PhysicalMemory",,48)For Each objItem in colItemsa=objitem.capacity/1048576temp=temp+objitem.capacityn=n+1Nextmemory=temp/1048576if n=1 thenmemory2= "内存: " & n & "条" &a&"M"elsememory2= "内存: " & n & "条" &a&"M"&" 总计"&memory&"M"end iftempfile.writeline(memory2)'硬盘set disk =objwmiservice.execQuery("select * from win32_diskdrive") for each item in diskdisk2= disk2 & item.model &" "disk1= "硬盘: "nexttempfile.write(disk1)tempfile.writeline(disk2)'显卡set video =objwmiservice.execQuery("select * fromwin32_videocontroller",,48)for each item in videovideo2= "显卡: " & item.Descriptionnexttempfile.writeline(video2)'网卡set network =objwmiservice.execQuery("SELECT * FROMWin32_NetworkAdapterConfiguration WHERE IPEnabled = True")for each item in networklan="网卡: " & item.descriptionnexttempfile.writeline(lan)systeminfo2="时间: " & nowtempfile.writeline(systeminfo2)。

基于WMI的局域网数据采集系统

基于WMI的局域网数据采集系统
数据采集。 根据上述 对数 据采集模块 的要求 , 系统采用 了 WMI 该 技术作 为该 模块 的 技术 支 持 。 1什 么 是 W MI .
和组 、 t eDrcoyWid w 安装 程序 、 n o s驱动程 序模 型设 备 Acv i t 、 n o s i e r Widw 驱动程序 , 以及 S M 管理信息基 ( B 数据等 。 I N P MI ) WM 托管资源通过一 个提供 程序与 WM 通讯 。当开始编写代码来与 WM 托管资源交互时 , I I 还经常会用 到一个术语 “ 实例 ” 它被用于 引用 在运行代码 中的托管 资 , 源 的虚 拟 表示 形 式 。
0 引言 .
随着局 域网在各个 领域中的广泛应用 , 局域网的管理 问题 也变 对 的 日益突出。而对局域 网中的大量计算机设备 进行监测与管理也 成为 了一项很艰 巨的重任 ,因此研 究局域 网中的计 算机设备如何进行 方便 地监 测与管理 , 变得非 常有意 义。 本课 题最初是 对某电业局 内部 5 0多 台安装 了 Widw n o s系统 的计 算机进行监测与管理 。 系统需要从这 5 多 台计算机 中收集各种 数据进 O 行分 析与存储 。而收集 的数据大体分成 了两种 。一种是静态数 据 , 即较 长一段时 间内都不会改变 的数据 。 这样 的数据包括 :P地址 、 网掩码 、 I 子 MAC地址 、 操作 系统版本 、P C U型号 、 盘 、 硬 内存 型号及 大小 以及主板 相关信息等等 ,获得这些信息 的 目的是为 了即时了解 底层的硬件配置 以方便相关部 门及时对老 旧的硬件进行更新换代 。 另一种是动态数据 , 这些数据会随着计算机的运行而改变 。这些 数据包括 : 内存 、P C U的占 用率 , 当前计算机 的运行进程 , 开启 的服务及端 口号等 , 获得 这些信息 的目的是为 了对 当前计算机 的运行情 况进行 即时捕捉 分析。对于静态 数据而言 , 由于这些数据在较长时 间内都 不会改变 , 因此对于这些数据 要求传送的实时性要求就不那 么严格 ,可以在开机后 五分钟之 内收集 并发送到数据库内即可。但相对 于动 态数据这些数据要根 据系统 的分 析要求实时进行采集。因此 , 整个 系统需要 一个数据采集模块 , 而这个 模块 由于处于整个系统的底层还要考虑应具有下述的特点 : () 1应具有一定的标准 , 具有可扩展性 。 f 对于硬件没有要求 , 2 ) 可在多个 wn o s i w 版本上运行 。 d () 3数据采集时应 占用较少的系统资源 , 不会影响计算机 的性能 。 () 4数据 采集 即支持用 户的随时指 令采集 , 又能实现数 据的周期 性

WindowsWMIC命令使用详解(附实例)

WindowsWMIC命令使用详解(附实例)

WindowsWMIC命令使用详解(附实例)Windows WMIC命令使用详解(附实例)执行“wmic”命令启动WMIC命令行环境。

这个命令可以在XP 或 .NET Server的标准命令行解释器(cmd.exe)、Telnet会话或“运行”对话框中执行。

这些启动方法可以在本地使用,也可以通过.NET Server终端服务会话使用。

第一次执行WMIC命令时,Windows首先要安装WMIC,然后显示出WMIC的命令行提示符。

在WMIC命令行提示符上,命令以交互的方式执行。

wimic的运行方式可以有两种法:1、搞入wimic进入后输入命令运行,键入wimic后出现wmic:root\cli>时你就可以输入命令了,如输入process显示所有的进程。

不知道有什么命令时可以输入用/?来显示帮助。

exit 是退出交互模式。

具体帮助用法如下:命令行帮助命令例子说明/? 或 -? 显示所有全局开关和别名的语法/ /? /user /? 显示指定全局开关的信息/? class /? 显示某个命令的信息/? memcache /? 显示某个别名的信息/? temperature get /? 显示别名与动词组合的信息/?:Full irq get /?:Full 显示动词的帮助信息如:我要查看process命令的帮助,键入:process/?后显示如下:wmic:root\cli>process /?PROCESS - 进程管理。

提示: BNF 的别名用法。

(<alias> [WMIObject] | <alias> [<path where>] | [<alias>] <path where>) [<verb clause>].用法:PROCESS ASSOC [<format specifier>]PROCESS CALL <method name> [<actual param list>]PROCESS CREATE <assign list>PROCESS DELETEPROCESS GET [<property list>] [<get switches>]PROCESS LIST [<list format>] [<list switches>]2、用wimic 后面直接跟命令运行,如wmic process 就显示了所有的进程了。

基于WMI的WindoWs远程监控(VC++)

基于WMI的WindoWs远程监控(VC++)
In this paper, on the basic of introducing computer management by WMI, VC++ and MFC, simplely using VBScript scripts to realize remote Windows computer management, and mainly realize access to remote computer hardware and software information through the VC++ programming, shows the data we get through the MFC interface. Using the modular programming design thought, the functions of each module were realized, and work collaboratively, achieved the target efficient management of computer, and the interface is simplely to operate. Ultimately, implemented monitoring and contronling remote computer specific method by using WMI, and shows that this method is effective combined with the application example.
微软一直都在努力地使Windows操作系统易于管理,这是通过集中不同的策略来实现的。目前在Windows NT 4.0 Option Pack中采用了Windows Script Host以来,脚本功能得到了显著改进。1994年,微软发布了版本号为1.0的Systems Management Server,它提供了硬件和软件库存、软件分布发布以及远程诊断功能。Zero Administration Initiative for Windows(Windows零管理,ZAW)不仅把这两种功能合为一体,同时还合并了一些其他技术(如微软管理管理控制台、Windows管理规范、基于Web的企业管理、系统策略和零管理包等)。ZAW最初面向的是WindowsNT/9x操作系统,允许实现自动化管理任务,并可对客户机的桌面进行集中式管理。后来Systems Management Server 2.0进一步增强了这些特性。

用WMIC命令脚本执行WMI任务

用WMIC命令脚本执行WMI任务

用WMIC命令脚本执行WMI任务━━━━━━━━━━━━━━━━━━━━━━━━━━MicrosoftWindowsManagementInstrumentation(WMI)。

中文名字叫Windows管理规范。

从Windows2000开始,WMI(Windows管理规范)就内置于操作系统中,并且成为了Windows 系统管理的重要组成部分。

所以大家很容易就能见到它的,因为我们至少也应该是个Windows2000的使用者了。

下面我将详细介绍它的每个细节,让你从不认识它到喜欢上它。

WMI能做什么?WMI不仅可以获取想要的计算机数据,而且还可以用于远程控制。

远程控制计算机可是大家都喜欢的东西。

很多远程监视控制类软件通常的做法是:在远程计算机上运行服务端后台程序,在本地计算机上运行一个客户器端控制程序,通过这二个程序的勾结来实现对计算机的远程控制。

这种作法的缺点是十分明显的,当服务端程序关了,这种远程监控就无法实现了,因为没有内线了。

而WMI实现的远程监视和控制完全不需要另外装什么服务端的东西,系统默认就将WMI服务给开了。

具体说来,WMI的本领如下:1.获取本地和远程计算机的硬件软件信息。

2.监视本地和远程计算机的软件和服务等运行状况。

3.控制本地和远程计算机的软件和服务运行。

4.高级应用。

如何访问WMI?当我们知道WMI的某些本领后,我们已经很想知道如何认识他并利用他了。

利用WMI有许多途径,简单说来有三种了:1.通过微软给我们提供的各种工具来实现普通查询和操作。

主要包括命令提示符下面的WMIC,还有就是微软给我们提供的WMITOOL,大家可以到微软的网站上免费下载,当然我也可以给大家免费提供。

2.通过自己编写脚本来实现更灵活操作。

要想真正灵活实用,对WSH脚本的熟悉是必须的,当然如果你不熟悉也没有关系,稍后我会给大家详细解释的。

3.通过编写我们自己的程序来访问并操作它。

什么语言都行。

如果用.NET类程序要简单些了,如果用VC等要复杂些了,起码我是这么认为的。

CC++通过WMI和系统API函数获取获取系统硬件配置信息

CC++通过WMI和系统API函数获取获取系统硬件配置信息

来源:/wenliabc2007/article/details/6718084前段时间由于项目需要,要求做一个服务器的实时性能监控(CPU、内存、网络利用率等)和读取服务器的硬件配置参数的接口供项目组使用,就是一个类似于鲁大师之类的东东吧...当然第一想法肯定是利用Windows提供的系统标准API函数来完成所需的功能,当然这也应该是当前最理想最有效率的选择了。

但是如果你对API编程不是很熟练的话...那就相当蛋疼了!你知道用API可以做到但是不知道用哪个API,好啊,可以查MSDN。

问题是你连API名字都不知道...当然,如果你们公司允许你们上国内局域网的话那就好办多了,因为有无数强大的网友会帮你找到答案。

使用API编程的另一个问题是如果你仍旧对API不熟悉的话调用起来相当困难、很不顺手。

还有一种方案就是--->“强大”的WMI,.net平台的程序员可能对这个比较熟悉,WMI即windows管理规范。

通过它可以访问、配置、管理和监视几乎所有的Windows资源。

当然对于程序员而言在WMI体系结构中我们最需要关心的就是WMI提供的程序和接口。

WMI提供程序在WMI和托管资源之间扮演着中间方的角色。

提供程序代表使用者应用程序和脚本从WMI托管资源请求信息,并发送指令到WMI托管资源。

下面是我们利用WMI编程经常要用到的WMI内置提供程序清单,以供编程参考。

1.Active Directory提供程序链接库文件:dsprov.dll命名空间:root\directory\ldap作用:将Active Directory 对象映射到WMI。

2.事件日志提供程序链接库文件:ntevt.dll命名空间:root\cimv2作用:管理Windows 事件日志,例如,读取、备份、清除、复制、删除、监视、重命名、压缩、解压缩和更改事件日志设置。

3.注册表提供程序链接库文件:stdprov.dll命名空间:root\default作用:读取、写入、枚举、监视、创建、删除注册表项和值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于WMIC和脚本实现对内网终端及设备的信息统计
摘要:随着电力企业信息化的不断深入发展,电力企业对信息化的依赖程度越
来越高,公司各种终端越来越多,给运维人员的设备台账治理带来了很大的难度。

本文主要探讨利用wmic和脚本进行终端信息收集,提高运维人员的工作效率。

关键词:WMIC;脚本;终端信息
1 引言
建立详细的设备台账,是终端运维工作的基础,但随着电网的发展,公司各
类终端越来越多,给运维人员的设备台账治理带来了很大难度。

微软Windows98
及以后的版本提供了WMIC功能,可快速查询系统软硬件及外接设备信息数据,
利用这一功能,使用宿主脚本及数据库技术,结合桌管系统策略下发功能,可提
高内外网终端及外接设备普查效率。

2 软件介绍
2.1 WMIC
wmic是wmic命令行,作为WindowsXP的一部分发布的wmi命令行工具提
供一个到wmi接触结构的命令行接口。

可以使用wmic.exex执行来自命令行的常
见wmi任务,包括浏览CIM和检查CIM类定义。

2.2 VB脚本
VBScript是Visual Basic Script的简称,即Visual Basic脚本语言,它是一种微
软环境下的轻量级的解释型语言,它使用COM组件、WMI、WSH、ADSI访问系
统中的元素,对系统进行管理。

同时它又是asp动态网页默认的编程语言,配合asp内建对象和ADO对象,用户很快就能掌握访问数据库的asp动态网页开发技术。

如图2-1所示。

图2-1
2.3 北信源主机监控审计与补丁分发系统
北信源主机监控审计与补丁分发系统,以终端管理为核心,形成集主机监控审计、补丁
管理、桌面应用管理、信息安全管理、终端行为管控等终端安全行为一体的管理体系,为企
业管理者提供终端多位一体、同意管理的解决方案。

3 处理过程
3.1 前期准备
1)根据工作任务要求,收集合理的统计字段。

2)利用微软操作系统wbemtest工具在wmic中寻找相应的类别及对象,对相似相近的类

对象,根据要求进行合理的取舍。

3)根据确定的字段,在SQL Server数据库(或任何支持网络的关系型数据库)建立终端
计算机及外接设备数据表,并设置合理的字段属性。

3.2 编制脚本
1)编制并测试数据收集上报的宿主脚本程序,宿主脚本通过调用操作系统wmic管理功能,获取本机软硬件及外接设备数据后立刻上传服务器。

2)为更好的支持数据库,应采用VBScript或JavaScript脚本。

3)为最大化减少普查工作对终端用户的影响,宿主脚本或批处理在工作期间应以静默方
式运行。

3.3 下发策略
1)上传脚本至桌管系统,为确保数据库用户名、密码、ip等连接参数安全,不应该将明
文用户、密码、ip等变量直接写入脚本中,因为终端用户通过查看和截留脚本,可获取服务
器ip、端口、用户名、密码,采用加密的策略参数传递可以很好的解决这一安全性问题。

2)启用桌管下发策略,监视数据库或ftp服务器数据收集情况,如有重报应检查脚本中是
否设定了唯一性检查,通常情况下应以主机mac进行唯一性识别。

如有漏报,应检查主机操
作系统及防火墙设置是否正常。

3)正常情况下,策略运行一周可获得可观的普查覆盖率。

4)通过windows的 ODBC数据源设置,可直接从Excel中获取数据库普查所有数据。

4 实际应用
通过该方法可以高效、准确获取到系统软硬件及外接设备信息数据。

如图4-1、4-2所示。

图4-1
图4-2
5 总结
信息化发展到今天,一切在计算机上重复、繁杂的人工劳动都可以由它来代替了。

此次WMIC、宿主脚本、数据库、桌管(准入)系统综合应用,为我们提高工作效率和运行维护开辟
了新思路。

参考文献
[1] Tercel99.WMIC命令整理
[DB/OL]./Tercel99/article/details/6403823.html,2011
作者简介:
张莎(1992年10月),女,甘肃民勤,本科
邵娟(1985年5月),女,甘肃兰州,硕士。

相关文档
最新文档