撰寫WMIC(Windows Management Instrumentation)查詢程式


動機:
對於網管人員想要清查公司電腦的軟硬體資訊,
是一件吃力不討好的工作,
是有一些軟體可以達成上述要求,
但如果要寫點查詢程式並可直接Email回給網管的話,
要如何寫呢?!

說明:
利用 WMI ,
再撰寫相關的vbscript程式即可達到要求, 程式碼如下:


'查詢網路單一主機軟硬體資訊的WMI Script,並將產生結果寫入文字檔

'strComputer = InputBox("請輸入本機電腦.或電腦名稱或IP位址:", "訊息")
'Retrieving the Computer Name
'strComputer = "localhost" 'local hostname
Set wshShell = WScript.CreateObject("WScript.Shell")
strComputerName = wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")

'開啟文字檔案c:\Computer.txt
Set objFSO = CreateObject("Scripting.FileSystemObject")
'Set OutputFile = objFSO.OpenTextFile("c:\Computer.txt", 8, true)
Set OutputFile = objFSO.CreateTextFile("c:\Computer.txt", true)
OutputFile.WriteLine date()
OutputFile.WriteBlankLines(1) 'an newline

'查詢電腦名稱與作業系統版本
Set objWMIService = GetObject("winmgmts:\\" & CSTR(strComputerName) & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery(" SELECT * FROM Win32_OperatingSystem ") 
For Each objItem in colItems
    OutputFile.WriteLine "電腦名稱: " & objItem.CSName
    OutputFile.WriteLine "作業系統與版本: " & objItem.Caption & objItem.CSDVersion & objItem.BuildNumber 
Next
OutputFile.WriteLine 'an newline

'查詢登入電腦的使用者名稱
Set objWMIService = GetObject("winmgmts:\\" & CSTR(strComputerName) & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery(" SELECT * FROM Win32_ComputerSystem ") 
For Each objItem in colItems 
    OutputFile.WriteLine "使用者名稱: " & objItem.UserName
Next
OutputFile.Write chr(13) & chr(10) 'an newline

'查詢CPU型號
Set objWMIService = GetObject("winmgmts:\\" & CSTR(strComputerName) & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery(" SELECT * FROM Win32_Processor ") 
For Each objItem in colItems 
    OutputFile.WriteLine "CPU: " & objItem.Name 
Next
OutputFile.Write vbNewLine 'an newline

'查詢RAM大小
Set objWMIService = GetObject("winmgmts:\\" & CSTR(strComputerName) & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery(" SELECT * FROM Win32_LogicalMemoryConfiguration ") 
For Each objItem in colItems 
    OutputFile.WriteLine "記憶體: " & Int((objItem.TotalPhysicalMemory + 1023) / 1024) & "MB"
Next
OutputFile.Write vbCrLf 'an newline

'查詢磁碟容量
Set objWMIService = GetObject("winmgmts:\\" & CSTR(strComputerName) & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery(" SELECT * FROM Win32_DiskDrive ") 
For Each objItem in colItems  
    OutputFile.WriteLine "磁碟型號: " & objItem.Caption
    OutputFile.WriteLine "磁碟容量: " & Int( ( objItem.Size + 536870912 ) / 1073741824 ) & " GB" 
Next
OutputFile.WriteLine 'an newline

'查詢主機板型號
Set objWMIService = GetObject("winmgmts:\\" & CSTR(strComputerName) & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery(" SELECT * FROM Win32_BaseBoard ") 
For Each objItem in colItems    
    OutputFile.WriteLine "主機板型號: " & objItem.Manufacturer & objItem.product
Next
OutputFile.WriteLine 'an newline

'查詢光碟機型號
Set objWMIService = GetObject("winmgmts:\\" & CSTR(strComputerName) & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery(" SELECT * FROM Win32_CDROMDrive ") 
For Each objItem in colItems 
    OutputFile.WriteLine "光碟機型號: " & objItem.Caption
Next
OutputFile.WriteLine 'an newline

'查詢顯示卡型號
Set objWMIService = GetObject("winmgmts:\\" & CSTR(strComputerName) & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery(" SELECT * FROM Win32_DisplayConfiguration ") 
For Each objItem in colItems 
    OutputFile.WriteLine "顯示卡型號: " & objItem.Caption
Next
OutputFile.WriteLine 'an newline

'查詢網路卡名稱和MAC Address
Set colItems = objWMIService.ExecQuery(" SELECT * FROM Win32_NetworkAdapterConfiguration ") 
For Each objItem in colItems 
    OutputFile.WriteLine "網路卡名稱: " & objItem.Caption
    OutputFile.WriteLine "MAC Address: " & objItem.MACAddress
Next
OutputFile.WriteLine 'an newline

'關閉檔案Computer.txt
OutputFile.Close

'使用E-Mail夾帶附件檔的方式,寄給系統管理人員

'使用CDO.Message物件
Set Email = CreateObject("CDO.Message")
'設定Message物件相關屬性,並夾帶附件檔c:\Computer.txt的方式
Email.From = "account@test.com.tw"
Email.To = "account@test.com.tw"
Email.Subject = strComputerName & " - 主機軟硬體資訊" 
Email.Textbody = "詳如附檔"
Email.AddAttachment "c:\Computer.txt"

'設定Configuration物件相關欄位
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.test.com.tw" 
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
Email.Configuration.Fields.Update

'傳送郵件
Email.Send
Set Email = nothing

Wscript.echo "Done!"
Wscript.Quit


參攷: WMI語法:查詢網路單一主機軟硬體資訊

vbcript檔下載連結: https://docs.google.com/leaf?id=0B_4eUrknq7N1YmNlMjg1YWUtMmYwZC00ZDFiLThiNzUtOGUxODQxODEyMWEx&hl=zh_TW

留言