'*******************************************************************************************
'Version:3.1
' 調(diào)整錯(cuò)誤處理方法,錯(cuò)誤信息輸出到LogFile文件,可以查看掃描失敗原因
' 如果出現(xiàn)“RPC 服務(wù)器不可用”錯(cuò)誤,是因?yàn)檫h(yuǎn)程主機(jī)沒開機(jī)
' 如果出現(xiàn)“RPC 服務(wù)器不可用”之外的錯(cuò)誤,可能是由于正在運(yùn)行的程序造成,請你把此信息告訴我
' 重啟后再次掃描就可以排除非“RPC 服務(wù)器不可用?!钡腻e(cuò)誤
' 如果掃描到的硬件信息為空,應(yīng)該是驅(qū)動問題(或BIOS不完善),請自行解決
'Version:3.0
' 增加輸出BIOS的發(fā)行日期,和主板信息放在一起
'Version:2.9
' 修正所有GetInfo過程遇錯(cuò)的處理方法,避免返回的數(shù)組上限不符合輸出要求導(dǎo)致腳本報(bào)錯(cuò)。
' 之所以為出現(xiàn)這種情況,是因?yàn)閃in32類檢索不到硬件或連接到Win32類失?。?
' 原來判斷是否出現(xiàn)Err,忽略了檢索不到硬件的情況(連接成功無Err,Count為0)
' 檢索不到硬件多數(shù)是因?yàn)轵?qū)動沒裝好
'Version:2.8
' 增加GetIDEProtocol過程,獲取IDE控制器使用的協(xié)議,只是增加了代碼,沒有調(diào)用
' 計(jì)劃增加檢索其它存儲器控制器的過程
'Version:2.7
' 檢索硬盤/顯卡/網(wǎng)卡/聲卡的過程增加 DeviceID 屬性(設(shè)備標(biāo)識符)
' 此屬性不被輸出,用于腳本內(nèi)部判斷
'Version:2.6
' 原來輸出搜索到的第一個(gè)硬盤
' 改為輸出搜索到的第一個(gè)InterfaceType屬性為IDE的硬盤的信息
'Version:2.5
' 增加Sort過程,排序硬件信息
'Version:2.4
' 調(diào)整輸出信息的分類,同類信息盡可能的只使用一個(gè)逗號分隔,以便導(dǎo)入xls后在同一列
' 查詢到的硬件信息如果是空或0,有可能是相關(guān)驅(qū)動不完善或未定義此信息,也可能是未安裝驅(qū)動
' 因?yàn)閃MI查詢就代表了系統(tǒng)知道這些硬件的詳細(xì)信息,查不到信息就是系統(tǒng)不知道
' 系統(tǒng)不知道硬件的詳細(xì)信息,代表著性能可能有所缺失,建議找個(gè)好驅(qū)動安裝
' 值得注意的是主板驅(qū)動
' (為了更容易理解,此版本的升級信息被編輯過)
'Version:2.3
' 取消2.2版增加輸出的硬盤接口類型
' 由于STAT也歸于IDE接口,這會導(dǎo)致誤解
' PS:腳本只輸出搜索到的第一個(gè)硬盤
'Version:2.2
' GetMemoryInfo過程增加MemoryType、FormFactor、TypeDetail三個(gè)屬性
' 輸出增加內(nèi)存類型、封裝類型
' 輸出增加硬盤容量、接口類型
'Version:2.1
' GetOSInfo過程增加去掉Caption屬性中帶有的逗號“,”的代碼
' 原因:在檢測2003系統(tǒng)時(shí),讀取到的Caption屬性,帶有逗號“,”
' 這會影響輸出,因?yàn)檩敵鍪且远禾枴?”為分隔符的
'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過程增加一個(gè)判斷
' 忽略讀取IPAddress(0)時(shí)會產(chǎn)生Err類型數(shù)據(jù)的適配器(對戰(zhàn)平臺)
'Version:2.0 Beta2
' GetOSInfo過程原來使用的Name、ServicePackMajorVersion屬性
' 改為使用Caption、CSDVersion屬性
' 所有GetInfo過程增加錯(cuò)誤處理代碼,避免正在掃描的時(shí)候
' 腳本遇到運(yùn)行時(shí)錯(cuò)誤導(dǎo)致腳本退出
'Version:2.0 Beta1
' 增加掃描失敗記錄,再次運(yùn)行腳本只讀取失敗記錄,忽略配置信息
'Version:1.1
' GetNetworkInfo過程增加一個(gè)判斷
' 忽略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
'你可以任意編輯、引用腳本的全部或部分代碼
'轉(zhuǎn)貼、引用腳本的全部或部分代碼請保留版權(quán)
'**************************************
'********************************說明開始*************************************
'Input格式:起始IP-數(shù)量=用戶名=密碼;起始計(jì)算機(jī)名-數(shù)量=用戶名=密碼
' 多個(gè)配置項(xiàng)用“;”隔開
'例:192.168.0.1-10指明IP范圍為192.168.0.1~192.168.0.10,支持跨網(wǎng)段
'例:PC001-10指明范圍為PC001~PC010(計(jì)算機(jī)名可以包含-號)
'與指定格式不相同的,默認(rèn)為單IP[計(jì)算機(jī)名],也可以在"未掃描的計(jì)算機(jī).txt"里配置
'"硬件信息.txt"是以逗號分隔各項(xiàng)硬件信息,你需要自己導(dǎo)入XLS整理、精簡
'未掃描到的計(jì)算機(jī),會把機(jī)號、用戶名、密碼保存到"未掃描的計(jì)算機(jī).txt"
'再次運(yùn)行腳本將只讀取"未掃描的計(jì)算機(jī).txt"里的信息(如果存在并且大小不為0)
'********************************說明結(jié)束*************************************
Dim Input, InfoOutFile, LogFile '請按格式給Input賦值
'Input = "pc021=administrator=cylslynetbar"
Input = "PC001-109=administrator=cylslynetbar;pc110-85=administrator=LYjfnetbaradmin"
InfoOutFile = "硬件信息.txt"
LogFile = "未掃描的計(jì)算機(jī).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 "掃描結(jié)果:" _
vbCrLf vbTab "掃描成功:" Space(LenNum1) intCount1 " 臺" _
vbCrLf vbTab "掃描失?。? Space(LenNum2) intCount2 " 臺" _
vbCrLf "掃描失敗的電腦已做記錄,再次運(yùn)行腳本只掃描記錄里的電腦",,"掃描完成"
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
'*********************************************************************************
'目的:連接到遠(yuǎn)程主機(jī)的WMI命名空間
'輸入:arrArray數(shù)組,包含有計(jì)算機(jī)名[IP]、用戶名、密碼
'調(diào)用:LinkServer過程
' 如果返回SWbemLocator對象ConnectServer方法的實(shí)例,調(diào)用OutInfo過程
' 如果返回Err信息(字符串類型),輸出計(jì)算機(jī)名[IP]、用戶名、密碼及錯(cuò)誤信息到LogFile文件
' OutInfo過程
' 如果返回Err信息(字符串類型)輸出計(jì)算機(jī)名[IP]、用戶名、密碼及錯(cuò)誤信息到LogFile文件
'傳遞:SWbemLocator對象ConnectServer方法的實(shí)例傳遞給OutInfo過程
' 計(jì)算機(jī)名[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) "=" _
"錯(cuò)誤編號:" CStr(Err.Number) _
",錯(cuò)誤原因:" CStr(Err.Description) _
",錯(cuò)誤來源:" 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方法的實(shí)例
'調(diào)用:獲取硬件信息的GetXXXInfo過程
'傳遞:SWbemLocator對象ConnectServer方法的實(shí)例
'返回:所有調(diào)用的GetInfo過程都未返回Err對象,則返回True
' 某個(gè)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 "計(jì)算機(jī)名,系統(tǒng)(初裝日期),主板型號(廠商)(發(fā)行日期),CPU型號(接口類型),外頻,L2容量(速度)," _
"內(nèi)存總量,內(nèi)存速度(位置),內(nèi)存類型(封裝類型),硬盤型號(容量),顯卡型號(顯存),網(wǎng)卡,IP/MAC"
End If
'系統(tǒng)
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) "),"
'內(nèi)存
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),"
'網(wǎng)卡
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
'*********************************************************
'目的:連接到遠(yuǎn)程主機(jī)的WMI命名空間
'輸入:strComputer:遠(yuǎn)程主機(jī)的計(jì)算機(jī)名或IP
' strNamespace:命令空間
' strUserName:用戶名
' strPassword:密碼
'返回:連接成功,返回SWbemLocator類連接遠(yuǎn)程主機(jī)后的對象的實(shí)例
' 連接失敗,返回錯(cuò)誤對象
'*********************************************************
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
'******************************************
'目的:正則表達(dá)式
'輸入:strPatrn:正則表達(dá)式模式
' strString:要執(zhí)行正則表達(dá)式的字符串
'返回: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進(jìn)制轉(zhuǎn)10進(jìn)制
'輸入:strString:2、8、16進(jìn)制數(shù)
' intNum:進(jìn)制(2|8|16)
'返回:10進(jìn)制數(shù)
'***************************************
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控制鼠標(biāo)的實(shí)現(xiàn)代碼(獲取鼠標(biāo)坐標(biāo)、鼠標(biāo)移動、鼠標(biāo)單擊、鼠標(biāo)雙擊、鼠標(biāo)右擊)
- 獲取外網(wǎng)IP并發(fā)送到指定郵箱的vbs代碼[已測]
- vbs 獲取當(dāng)前目錄的實(shí)現(xiàn)代碼
- VBS獲取當(dāng)前目錄下所有文件夾名字的代碼
- vbs獲取當(dāng)前時(shí)間日期的代碼
- vbscript獲取文件的創(chuàng)建時(shí)間、最后修改時(shí)間和最后訪問時(shí)間的方法
- vbs中獲取腳本當(dāng)前路徑的2個(gè)方法
- 通過vbs獲取遠(yuǎn)程host文件并保存到指定目錄
- VBScript獲取CPU使用率的方法
- 使用vbs獲取雅虎匯率