用vbs實現(xiàn)獲取電腦硬件信息的腳本_最新版
更新時間:2008年05月05日 22:47:50 投稿:mdxy-dxy
比較迅速的獲取硬件信息排序后的txt文件把后綴名改為csv就是表格了,精簡、整理后輸出打印就OK了。
如此詳細(xì)的信息,給老板看,一定可以讓老板對你另眼相看。
即使自己看,也能發(fā)現(xiàn)很多料想不到的的信息。
'******************************************************************** '目的:獲取IDE控制器使用的訪問受控設(shè)備的協(xié)議 '輸入:SWbemLocator對象ConnectServer方法連接到遠(yuǎn)程主機(jī)的實例 '返回:數(shù)組,上限為(IDE控制器數(shù)量*2),0=IDE控制器數(shù)量 ' 取2種屬性: ' 1 2 ' DeviceID ProtocolSupported ' 設(shè)備標(biāo)識符 控制協(xié)議 '******************************************************************** Function GetIDEProtocol(objConnection) Dim objIDEProtocol, IDEItem, Num Dim Tmp Redim arrIDE(0) Num = 0 On Error Resume Next Set objIDEProtocol = objConnection.InstancesOf("Win32_IDEController") If Err Then GetIDEProtocol = "錯誤編號:" & CStr(Err.Number) & _ ",錯誤原因:" & CStr(Err.Description) & _ ",錯誤來源:" & CStr(Err.Source) & " By GetIDEProtocol Function" Err.Clear On Error Goto 0 Exit Function End If Tmp = objIDEProtocol.Count If Err Then GetIDEProtocol = "錯誤編號:" & CStr(Err.Number) & _ ",錯誤原因:" & CStr(Err.Description) & _ ",錯誤來源:" & CStr(Err.Source) & " By GetIDEProtocol Function" Err.Clear On Error Goto 0 Exit Function End If For Each IDEItem In objIDEProtocol 'Msgbox IDEItem.DeviceID & vbCrLf & IDEItem.ProtocolSupported Num = Num + 1 Redim Preserve arrIDE(Num*2) arrIDE(Num*2-1) = IDEItem.DeviceID Select Case IDEItem.ProtocolSupported Case 1 :arrIDE(Num*2) = "Other" Case 2 :arrIDE(Num*2) = "Unknown" Case 3 :arrIDE(Num*2) = "EISA" Case 4 :arrIDE(Num*2) = "ISA" Case 5 :arrIDE(Num*2) = "PCI" Case 6 :arrIDE(Num*2) = "ATA/ATAPI" Case 7 :arrIDE(Num*2) = "Flexible Diskette" Case 8 :arrIDE(Num*2) = "1496" Case 9 :arrIDE(Num*2) = "SCSI Parallel Interface" Case 10 :arrIDE(Num*2) = "SCSI Fibre Channel Protocol" Case 11 :arrIDE(Num*2) = "SCSI Serial Bus Protocol" Case 12 :arrIDE(Num*2) = "SCSI Serial Bus Protocol-2 (1394)" Case 13 :arrIDE(Num*2) = "SCSI Serial Storage Architecture" Case 14 :arrIDE(Num*2) = "VESA" Case 15 :arrIDE(Num*2) = "PCMCIA" Case 16 :arrIDE(Num*2) = "Universal Serial Bus" Case 17 :arrIDE(Num*2) = "Parallel Protocol" Case 18 :arrIDE(Num*2) = "ESCON" Case 19 :arrIDE(Num*2) = "Diagnostic" Case 20 :arrIDE(Num*2) = "I2C" Case 21 :arrIDE(Num*2) = "Power" Case 22 :arrIDE(Num*2) = "HIPPI" Case 23 :arrIDE(Num*2) = "MultiBus" Case 24 :arrIDE(Num*2) = "VME" Case 25 :arrIDE(Num*2) = "IPI" Case 26 :arrIDE(Num*2) = "IEEE-488" Case 27 :arrIDE(Num*2) = "RS232" Case 28 :arrIDE(Num*2) = "IEEE 802.3 10BASE5" Case 29 :arrIDE(Num*2) = "IEEE 802.3 10BASE2" Case 30 :arrIDE(Num*2) = "IEEE 802.3 1BASE5" Case 31 :arrIDE(Num*2) = "IEEE 802.3 10BROAD36" Case 32 :arrIDE(Num*2) = "IEEE 802.3 100BASEVG" Case 33 :arrIDE(Num*2) = "IEEE 802.5 Token-Ring" Case 34 :arrIDE(Num*2) = "ANSI X3T9.5 FDDI" Case 35 :arrIDE(Num*2) = "MCA" Case 36 :arrIDE(Num*2) = "ESDI" Case 37 :arrIDE(Num*2) = "IDE" Case 38 :arrIDE(Num*2) = "CMD" Case 39 :arrIDE(Num*2) = "ST506" Case 40 :arrIDE(Num*2) = "DSSI" Case 41 :arrIDE(Num*2) = "QIC2" Case 42 :arrIDE(Num*2) = "Enhanced ATA/IDE" Case 43 :arrIDE(Num*2) = "AGP" Case 44 :arrIDE(Num*2) = "TWIRP (two-way infrared)" Case 45 :arrIDE(Num*2) = "FIR (fast infrared)" Case 46 :arrIDE(Num*2) = "SIR (serial infrared)" Case 47 :arrIDE(Num*2) = "IrBus" End Select Next If Err Then GetIDEProtocol = "錯誤編號:" & CStr(Err.Number) & _ ",錯誤原因:" & CStr(Err.Description) & _ ",錯誤來源:" & CStr(Err.Source) & " By GetIDEProtocol Function" Err.Clear On Error Goto 0 Exit Function End If If Num = 0 Then Redim Preserve arrIDE(2) End If arrIDE(0) = Num GetIDEProtocol = arrIDE On Error Goto 0 End Function '******************************************************************************************* 'Version:3.1 ' 調(diào)整錯誤處理方法,錯誤信息輸出到LogFile文件,可以查看掃描失敗原因 ' 如果出現(xiàn)“RPC 服務(wù)器不可用”錯誤,是因為遠(yuǎn)程主機(jī)沒開機(jī) ' 如果出現(xiàn)“RPC 服務(wù)器不可用”之外的錯誤,可能是由于正在運行的程序造成,請你把此信息告訴我 ' 重啟后再次掃描就可以排除非“RPC 服務(wù)器不可用。”的錯誤 ' 如果掃描到的硬件信息為空,應(yīng)該是驅(qū)動問題(或BIOS不完善),請自行解決 'Version:3.0 ' 增加輸出BIOS的發(fā)行日期,和主板信息放在一起 'Version:2.9 ' 修正所有GetInfo過程遇錯的處理方法,避免返回的數(shù)組上限不符合輸出要求導(dǎo)致腳本報錯。 ' 之所以為出現(xiàn)這種情況,是因為Win32類檢索不到硬件或連接到Win32類失??; ' 原來判斷是否出現(xiàn)Err,忽略了檢索不到硬件的情況(連接成功無Err,Count為0) ' 檢索不到硬件多數(shù)是因為驅(qū)動沒裝好 'Version:2.8 ' 增加GetIDEProtocol過程,獲取IDE控制器使用的協(xié)議,只是增加了代碼,沒有調(diào)用 ' 計劃增加檢索其它存儲器控制器的過程 'Version:2.7 ' 檢索硬盤/顯卡/網(wǎng)卡/聲卡的過程增加 DeviceID 屬性(設(shè)備標(biāo)識符) ' 此屬性不被輸出,用于腳本內(nèi)部判斷 'Version:2.6 ' 原來輸出搜索到的第一個硬盤 ' 改為輸出搜索到的第一個InterfaceType屬性為IDE的硬盤的信息 'Version:2.5 ' 增加Sort過程,排序硬件信息 'Version:2.4 ' 調(diào)整輸出信息的分類,同類信息盡可能的只使用一個逗號分隔,以便導(dǎo)入xls后在同一列 ' 查詢到的硬件信息如果是空或0,有可能是相關(guān)驅(qū)動不完善或未定義此信息,也可能是未安裝驅(qū)動 ' 因為WMI查詢就代表了系統(tǒng)知道這些硬件的詳細(xì)信息,查不到信息就是系統(tǒng)不知道 ' 系統(tǒng)不知道硬件的詳細(xì)信息,代表著性能可能有所缺失,建議找個好驅(qū)動安裝 ' 值得注意的是主板驅(qū)動 ' (為了更容易理解,此版本的升級信息被編輯過) 'Version:2.3 ' 取消2.2版增加輸出的硬盤接口類型 ' 由于STAT也歸于IDE接口,這會導(dǎo)致誤解 ' PS:腳本只輸出搜索到的第一個硬盤 'Version:2.2 ' GetMemoryInfo過程增加MemoryType、FormFactor、TypeDetail三個屬性 ' 輸出增加內(nèi)存類型、封裝類型 ' 輸出增加硬盤容量、接口類型 'Version:2.1 ' GetOSInfo過程增加去掉Caption屬性中帶有的逗號“,”的代碼 ' 原因:在檢測2003系統(tǒng)時,讀取到的Caption屬性,帶有逗號“,” ' 這會影響輸出,因為輸出是以逗號“,”為分隔符的 'Version:2.0 B5發(fā)布版 ' GetNetworkInfo過程改為使用MACAddress屬性非空、 ' Manufacturer屬性非"Microsoft"判斷網(wǎng)卡 'Version:2.0 Beta4 ' GetNetworkInfo過程使用NetConnectionStatus屬性判斷網(wǎng)絡(luò)適配器 ' NetConnectionStatus屬性表明連接狀態(tài)(2000系統(tǒng)不支持此屬性) ' 物理網(wǎng)絡(luò)適配器才具有此狀態(tài)(包括停用狀態(tài)在內(nèi)) 'Version:2.0 Beta3 ' GetNetworkInfo過程增加一個判斷 ' 忽略讀取IPAddress(0)時會產(chǎn)生Err類型數(shù)據(jù)的適配器(對戰(zhàn)平臺) 'Version:2.0 Beta2 ' GetOSInfo過程原來使用的Name、ServicePackMajorVersion屬性 ' 改為使用Caption、CSDVersion屬性 ' 所有GetInfo過程增加錯誤處理代碼,避免正在掃描的時候 ' 腳本遇到運行時錯誤導(dǎo)致腳本退出 'Version:2.0 Beta1 ' 增加掃描失敗記錄,再次運行腳本只讀取失敗記錄,忽略配置信息 'Version:1.1 ' GetNetworkInfo過程增加一個判斷 ' 忽略NetConnectionID屬性(接口名稱)為空的適配器 'Version:1.0 ' 初始版本 '*******************************************************************************************
代碼二:
Set wmi=GetObject("winmgmts:\\")Set board=wmi.instancesof("win32_baseboard")For Each b In boardmsg="主板:"&b.Manufacturer&vbTab&b.product&vbTab&Chr(13)Nextmsg=msg&Chr(13)&"---"+Chr(13)Set cpus=wmi.instancesof("win32_processor")msg=msg&"CPU 特征:"+Chr(13)For Each cpu In cpusmsg=msg+cpu.deviceid&vbTab&cpu.name&Chr(13) _&vbtab&cpu.SocketDesignation&vbtab&cpu.CurrentClockSpeed&"MHz"&vbtab&cpu.l2cachesize&"Kb_L2"&Chr(13)Nextmsg=msg&Chr(13)&"---"+Chr(13)Set mem=wmi.instancesof("win32_physicalmemory")msg=msg&"內(nèi)存容量:"+Chr(13)For Each m In memmsg=msg&m.tag&space(10)&m.capacity&+Chr(13)NextSet mem=wmi.instancesof("win32_computersystem")For Each m In memmsg=msg&"內(nèi)存總?cè)萘浚?&Round((m.totalphysicalmemory/1024^2),2)&"M"+Chr(13)Nextmsg=msg&Chr(13)&"---"+Chr(13)Set display=wmi.instancesof("Win32_videocontroller")msg=msg&"顯示系統(tǒng):"+Chr(13)For Each video In displaymsg=msg&video.deviceid&vbTab&video.name&Chr(13)Nextmsg=msg&Chr(13)&"---"+Chr(13)Set disks=wmi.instancesof("win32_diskdrive")msg=msg&"硬盤容量:"+Chr(13)For Each d In disksIf int(d.size/(1024^3))=0 Then n=Round(d.size/(1024^2),2)&"M"Elsen=Round(d.size/(1024^3),2)&"G"End Ifmsg=msg+d.deviceid&" 空間為: "&n&Chr(13)Nextmsg=msg&Chr(13)&"---"+Chr(13)MsgBox msg,0,"電腦基本特征"
效果圖:
您可能感興趣的文章:
- 用VBS控制鼠標(biāo)的實現(xiàn)代碼(獲取鼠標(biāo)坐標(biāo)、鼠標(biāo)移動、鼠標(biāo)單擊、鼠標(biāo)雙擊、鼠標(biāo)右擊)
- 獲取外網(wǎng)IP并發(fā)送到指定郵箱的vbs代碼[已測]
- vbs 獲取當(dāng)前目錄的實現(xiàn)代碼
- VBS獲取當(dāng)前目錄下所有文件夾名字的代碼
- vbs獲取當(dāng)前時間日期的代碼
- vbscript獲取文件的創(chuàng)建時間、最后修改時間和最后訪問時間的方法
- vbs中獲取腳本當(dāng)前路徑的2個方法
- 通過vbs獲取遠(yuǎn)程host文件并保存到指定目錄
- VBScript獲取CPU使用率的方法
- 使用vbs獲取雅虎匯率