作者:LZ-MyST

把生成的"硬件信息.txt"改为"硬件信息.csv"即变成表格文件,编辑一下,输出打印就OK了。
如此详细的信息,给老板看,一定可以让老板对你另眼相看。

 程序代码

   Option Explicit
  ****************************************
  作 者: LZ-MyST QQ:8450919
  http://hi.baidu.com/lzmyst
  http://www.clxp.net.cn
  E-Mail:
  你可以任意编辑、引用脚本的全部或部分代码
  转贴、引用脚本的全部或部分代码请注明出处
  ****************************************
 
  **************************************************************************
  Version:2.1
       修复GetOSInfo过程,在检测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
       初始版本
  **************************************************************************
 
  **************************************************************************
  格式:IP-数量=用户名=密码;计算机名-数量=用户名=密码
        多个配置项用“;”隔开
        IP是指起始IP
        数量是指从起始IP算起的多少个IP
        计算机名方式类似IP方式
  例:192.168.0.1-10指明IP范围为192.168.0.1~192.168.0.10,支持跨网段
  例:PC001-10指明范围为PC001~PC010(计算机名可以包含-号)
  与指定格式不相同的,默认为单IP[计算机名]
  如果计算机名为:A01-1,请参照计算机名格式在计算机名后加“-1”,A01-1-1
  也可以在strLogFile指定的文件里配置,一行一条配置信息:计算机名=用户名=密码
  **************************************************************************
  Dim strInput, strOutFile, strLogFile 请按格式给strInput赋值
  strInput = "PC001-109=administrator=newpc;PC110-85=administrator=oldpc;gameserver=gameadmin=upgame"
  strOutFile = "硬件信息.txt"
  strLogFile = "未扫描的计算机.txt"
  未扫描的计算机.txt保存有扫描失败的信息
  再次运行脚本将只读取这个文件里的信息
  这个文件大小为0时使用strInput的信息
  每次运行都更新扫描失败的信息,不会出现重复信息
  既避免重复扫描,也避免有些机子未扫描
  硬件信息.txt里的信息用逗号“,”为分隔符导入XLS
  整理后就可以打印成表格了
 
  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
  WshShell.Popup "任务统计:" & _
                 vbCrLf & vbTab & "扫描成功:" & intCount1 & " 台" & _
                 vbCrLf & vbTab & "扫描失败:" & intCount2 & " 台" & _
                 vbCrLf & vbTab & "扫描失败的电脑已做记录,下次运行脚本将再次扫描",,"任务完成"
 
Function ReadConfig
  Dim objMatches, objMatche,objLogFile, arrLog, intUBarrConfig
  If FSO.FileExists(strLogFile) Then
    If FSO.GetFile(strLogFile).Size = 0 Then
      Set objMatches = GetMatche("([^;=]+)=([^;=]+)=([^;=]+)", strInput)
      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(strLogFile)
      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("([^;=]+)=([^;=]+)=([^;=]+)", strInput)
    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过程
        如果返回False输出计算机名[IP]