欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

用vbs实现获取电脑硬件信息的脚本_最新版第1/4页

程序员文章站 2022-06-17 22:14:08
代码一: '*************************************************************************...

代码一:

'******************************************************************************************* 
 '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 
 '   初始版本 

 option explicit 
 '************************************** 
 '作 者: lz-myst qq:8450919 
 'http://hi.baidu.com/lzmyst 
 'http://www.clxp.net.cn 
 'e-mail:lzmyst@163.com 
 '你可以任意编辑、引用脚本的全部或部分代码 
 '转贴、引用脚本的全部或部分代码请保留版权 
 '************************************** 
  
 '********************************说明开始************************************* 
 '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, intcount2 
 intcount1 = 0 
 intcount2 = 0 
 set wshshell = wscript.createobject("wscript.shell") 
 set fso = wscript.createobject("scripting.filesystemobject") 
 readconfig 
 wshshell.popup "扫描过程会很慢,请耐心等待,完成后会给出提示",,"扫描开始" 
 linkremoteserver arrconfig 
 dim lennum1, lennum2 
 if intcount1 > intcount2 then 
  lennum1 = 0 
  lennum2 = len(intcount1) - len(intcount2) 
 else 
  lennum1 = len(intcount2) - len(intcount1) 
  lennum2 = 0 
 end if 
 sort infooutfile 
 wshshell.popup "扫描结果:" & _ 
         vbcrlf & vbtab & "扫描成功:" & space(lennum1) & intcount1 & " 台" & _ 
         vbcrlf & vbtab & "扫描失败:" & space(lennum2) & intcount2 & " 台" & _ 
         vbcrlf & "扫描失败的电脑已做记录,再次运行脚本只扫描记录里的电脑",,"扫描完成" 
  
function readconfig 
 dim objmatches, objmatche,objlogfile, arrlog, intubarrconfig 
 if fso.fileexists(logfile) then 
  if fso.getfile(logfile).size = 0 then 
   set objmatches = getmatche("([^;=]+)=([^;=]+)=([^;=]+)", input) 
   for each objmatche in objmatches 
    getconfig objmatche.submatches(0), objmatche.submatches(1), objmatche.submatches(2) 
   next 
   if objmatches.count = 0 then 
    msgbox "配置信息格式不正确,请修改" 
    wscript.quit 
   end if 
  else 
   set objlogfile = fso.opentextfile(logfile) 
   do until objlogfile.atendofstream 
    arrlog = split(objlogfile.readline,"=") 
    intubarrconfig = ((ubound(arrconfig)+1)\3+1)*3-1 
    redim preserve arrconfig(intubarrconfig) 
    arrconfig(intubarrconfig-2) = arrlog(0) 
    arrconfig(intubarrconfig-1) = arrlog(1) 
    arrconfig(intubarrconfig-0) = arrlog(2) 
   loop 
  end if 
 else 
  set objmatches = getmatche("([^;=]+)=([^;=]+)=([^;=]+)", input) 
  for each objmatche in objmatches 
   getconfig objmatche.submatches(0), objmatche.submatches(1), objmatche.submatches(2) 
  next 
  if objmatches.count = 0 then 
   msgbox "配置信息格式不正确,请修改" 
   wscript.quit 
  end if 
 end if 
end 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, objerr 
 set objwbemlocator = createobject("wbemscripting.swbemlocator") 
 set objerrlog = fso.createtextfile(logfile,true) 
 for e = 0 to ubound(arrarray) step 3 
  set objlinkserver = linkserver(arrconfig(e),"root\cimv2",arrconfig(e+1),arrconfig(e+2)) 
  if err then 
   objerrlog.writeline arrarray(e) & "=" & arrarray(e+1) & "=" & arrarray(e+2) & "=" & _ 
             "错误编号:" & cstr(err.number) & _ 
             ",错误原因:" & cstr(err.description) & _ 
             ",错误来源:" & cstr(err.source) & " by linkserver function" 
   intcount2 = intcount2 + 1 
   err.clear 
  else 
   objerr = outinfo(objlinkserver) 
   if vartype(objerr) = 8 then 
    objerrlog.writeline arrarray(e) & "=" & arrarray(e+1) & "=" & arrarray(e+2) & "=" & objerr 
    intcount2 = intcount2 + 1 
   end if 
  end if 
 next 
end function 

'****************************************************** 
'目的:输出硬件信息 
'输入:swbemlocator对象connectserver方法的实例 
'调用:获取硬件信息的getxxxinfo过程 
'传递:swbemlocator对象connectserver方法的实例 
'返回:所有调用的getinfo过程都未返回err对象,则返回true 
'   某个getinfo过程返回err对象,则返回false 
'****************************************************** 
function outinfo(objremote) 
 dim outfile, arrinfo, stroutinfo, tmp, a 
 if fso.fileexists(infooutfile) then 
  set outfile = fso.opentextfile(infooutfile,8) 
 else 
  set outfile = fso.createtextfile(infooutfile) 
  outfile.writeline "计算机名,系统(初装日期),主板型号(厂商)(发行日期),cpu型号(接口类型),外频,l2容量(速度)," & _ 
           "内存总量,内存速度(位置),内存类型(封装类型),硬盘型号(容量),显卡型号(显存),网卡,ip/mac" 
 end if 
 '系统 
 arrinfo = getosinfo(objremote) 
 if vartype(arrinfo) = 8 then 
  outinfo = arrinfo 
  exit function 
 end if 
 stroutinfo = arrinfo(0) & "," & arrinfo(1) & "(" & arrinfo(2) & ")," 
 '主板 
 arrinfo = getboardinfo(objremote) 
 if vartype(arrinfo) = 8 then 
  outinfo = arrinfo 
  exit function 
 end if 
 stroutinfo = stroutinfo & arrinfo(0) & "(" & arrinfo(1) & ")" 
 'bios 
 arrinfo = getbiosinfo(objremote) 
 if vartype(arrinfo) = 8 then 
  outinfo = arrinfo 
  exit function 
 end if 
 stroutinfo = stroutinfo & "(" & arrinfo(2) & ")," 
 'cpu 
 arrinfo = getcpuinfo(objremote) 
 if vartype(arrinfo) = 8 then 
  outinfo = arrinfo 
  exit function 
 end if 
 stroutinfo = stroutinfo & arrinfo(1) & "(" & arrinfo(8) & ")," & arrinfo(4) & "," & _ 
        arrinfo(6) & "(" & arrinfo(7) & ")," 
 '内存 
 arrinfo = getmemoryinfo(objremote) 
 if vartype(arrinfo) = 8 then 
  outinfo = arrinfo 
  exit function 
 end if 
 tmp = 0 
 for a = 1 to ubound(arrinfo) step 6 
  tmp = tmp + cint(arrinfo(a)) 
 next 
 stroutinfo = stroutinfo & arrinfo(0) & "条,共" & tmp & "m," 
 tmp = "" 
 for a = 2 to ubound(arrinfo) step 6 
  if a = ubound(arrinfo) - 4 then 
   tmp = tmp & arrinfo(a) & "(" & arrinfo(a+1) & ")," 
  else 
   tmp = tmp & arrinfo(a) & "(" & arrinfo(a+1) & ") " 
  end if 
 next 
 stroutinfo = stroutinfo & tmp 
 tmp = "" 
 for a = 4 to ubound(arrinfo) step 6 
  if a = ubound(arrinfo) - 2 then 
   tmp = tmp & arrinfo(a) & "(" & arrinfo(a+1) & ")," 
  else 
   tmp = tmp & arrinfo(a) & "(" & arrinfo(a+1) & ") " 
  end if 
 next 
 stroutinfo = stroutinfo & tmp 
 '硬盘 
 tmp = "" 
 arrinfo = getdiskinfo(objremote) 
 if vartype(arrinfo) = 8 then 
  outinfo = arrinfo 
  exit function 
 end if 
 for a = 1 to ubound(arrinfo) step 5 
  if arrinfo(a+1) = "ide" then 
   tmp = arrinfo(a) & "(" & arrinfo(a+2) & "g)," 
   exit for 
  end if 
 next 
 if tmp = "" then 
  stroutinfo = stroutinfo & "硬盘型号未检索到," 
 else 
  stroutinfo = stroutinfo & tmp 
 end if 
 '显卡 
 arrinfo = getvideoinfo(objremote) 
 if vartype(arrinfo) = 8 then 
  outinfo = arrinfo 
  exit function 
 end if 
 stroutinfo = stroutinfo & arrinfo(0) & "(" & arrinfo(1) & "m)," 
 '网卡 
 arrinfo = getnetworkinfo(objremote) 
 if vartype(arrinfo) = 8 then 
  outinfo = arrinfo 
  exit function 
 end if 
 stroutinfo = stroutinfo & arrinfo(1) & "," & arrinfo(2) & space(17-len(arrinfo(2))) & arrinfo(3) 
 '输出 
 outfile.writeline stroutinfo 
 intcount1 = intcount1 + 1 
 outinfo = true 
end function 

'********************************************************* 
'目的:连接到远程主机的wmi命名空间 
'输入:strcomputer:远程主机的计算机名或ip 
'   strnamespace:命令空间 
'   strusername:用户名 
'   strpassword:密码 
'返回:连接成功,返回swbemlocator类连接远程主机后的对象的实例 
'   连接失败,返回错误对象 
'********************************************************* 
function linkserver(strcomputer,strnamespace,strusername,strpassword) 
 dim objwbemlocator 
 set objwbemlocator = createobject("wbemscripting.swbemlocator") 
 dim objconnection 
 on error resume next 
 set objconnection = objwbemlocator.connectserver _ 
           (strcomputer, strnamespace, strusername, strpassword) 
 if err then 
   set linkserver = err 
   exit function 
 end if 
 on error goto 0 
 objconnection.security_.impersonationlevel = 3 
 set linkserver = objconnection 
end function 

'****************************************** 
'目的:正则表达式 
'输入:strpatrn:正则表达式模式 
'   strstring:要执行正则表达式的字符串 
'返回:match对象 
'****************************************** 
function getmatche(strpatrn, strstring) 
 dim regex 
 set regex = new regexp 
 regex.global = true 
 regex.ignorecase =true 
 regex.pattern = strpatrn 
 set getmatche = regex.execute(strstring) 
end function 

'*************************************** 
'目的:2、8、16进制转10进制 
'输入:strstring:2、8、16进制数 
'   intnum:进制(2|8|16) 
'返回:10进制数 
'*************************************** 
function changetodecimal(strstring, intnum) 
 changetodecimal = 0 
 if isnull(strstring) then changetodecimal = 0 : exit function 
 dim a, m 
 for a = 1 to len(strstring) 
  m = lcase(mid(strstring, a, 1)) 
  select case m 
   case "a" :m = 10 
   case "b" :m = 11 
   case "c" :m = 12 
   case "d" :m = 13 
   case "e" :m = 14 
   case "f" :m = 15 
  end select 
  changetodecimal = changetodecimal + m * intnum^(len(strstring)-a) 
 next 
end function 

            1234下一页阅读全文
            
您可能感兴趣的文章:用vbs控制鼠标的实现代码(获取鼠标坐标、鼠标移动、鼠标单击、鼠标双击、鼠标右击)获取外网ip并发送到指定邮箱的vbs代码[已测]vbs 获取当前目录的实现代码vbs获取当前目录下所有文件夹名字的代码vbs获取当前时间日期的代码vbscript获取文件的创建时间、最后修改时间和最后访问时间的方法vbs中获取脚本当前路径的2个方法通过vbs获取远程host文件并保存到指定目录vbscript获取cpu使用率的方法使用vbs获取雅虎汇率




        

相关文章

最新评论

相关标签: 收集 硬件信息