2009年3月4日星期三

利用vbs脚本获得局域网内PC的配置信息

对于一个企业来说,时刻掌握最新的PC配置信息对于IT维护和资产管理都很重要。下面以我单位的情况提供一种用vbs查询PC信息的一种方法。
我们单位使用DELL和LENOVO的品牌电脑,DELL电脑BIOS提供序列号用于报修,所以这里查询了主机型号、序列号、生产厂家和总内存大小等等,可以更加情况添加相应的内容。我建立info.vbs脚本内容如下:


On Error Resume Next


'从参数输入电脑ip或者电脑名:
Set objArgs = WScript.Arguments
strComputer = objArgs(0)


'主机名、电脑型号和内存总量:"
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set sysInfo = objWMIService.ExecQuery _
("Select * from Win32_ComputerSystem")
For Each objSysInfo in sysInfo
WScript.Echo "主机名: " & objSysInfo.Name
WScript.Echo "生产厂家: " & objSysInfo.Manufacturer
WScript.Echo "型号: " & objSysInfo.Model
Next


'获得主机序列号:
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_BIOS", , 48)
For Each objItem In colItems
WScript.Echo "出厂序列号: " & objItem.SerialNumber
Next


'获得CPU信息
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor", , 48)
For Each objItem In colItems
WScript.Echo "CPU型号: " & Trim(objItem.Name)
Next


'获得内存容量
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem", , 48)
For Each objItem In colItems
WScript.Echo "总内存:" & CStr(Int(objItem.TotalPhysicalMemory / 1048576)) & "M"
Next


'收集硬盘基本信息
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_DiskDrive", , 48)
For Each objItem In colItems
WScript.Echo "硬盘:" & Trim(objItem.Caption) & " 容量为:" &CStr(Int(objItem.Size/1000000000)) & "G"
Next
'收集软驱信息
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_FloppyDrive", , 48)
For Each objItem In colItems
WScript.Echo "软驱:" & Trim(objItem.Caption)
Next
'收集CDROM信息
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_CDROMDrive", , 48)
For Each objItem In colItems
WScript.Echo "光驱: " & Trim(objItem.Name)
Next


'收集显卡信息
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_VideoController", , 48)
For Each objItem In colItems
WScript.Echo "显卡: " & Trim(objItem.Caption) & Trim(objItem.VideoModeDescription)
Next


'收集网卡信息
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkAdapter", , 48)
For Each objItem In colItems
WScript.Echo "网卡: " & Trim(objItem.Description) & (objItem.MACAddress)
Next


'收集声卡信息
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_SoundDevice", , 48)
For Each objItem In colItems
WScript.Echo "声卡: " & Trim(objItem.ProductName)
Next
WScript.Echo " "



以上内容保存为info.vbs脚本,获得单个主机的配置信息的方法是开始--运行--cmd--回车,在cmd窗口中输入cscript info.vbs xxx,其中xxx为目标机器的ip或者主机名。

因为以上脚本可以从命令行获得参数,所以可以方便的加入批处理中执行。例如我公司内有多个VLAN,对其中一个VLAN22(IP范围为10.8.22.10到10.8.22.200),查询所有主机的配置信息的批处理如下:

for /L %%1 in (10,1,200) do @ping -n 1 10.8.22.%%1 丨find "timed" >nul 2>nul && echo 10.8.22.%%1_is_inexistent 丨丨 cscript /nologo info.vbs 10.8.22.%%1 >> 22.txt

该批处理首先判断一个IP是否存在,然后获取活动主机的电脑配置信息,保存在22.txt中以备查。(因无法显示,注意将换为丨换为英文的,即普通键盘上的"shift+\"键)

前提是你是所有PC的管理员,最好在域环境下使用。

关于VBS脚本使用请参考微软的相关文档:
http://www.microsoft.com/china/technet/community/scriptcenter/default.mspx

没有评论:

发表评论