65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 WMI 收集有关域 PC 的信息

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.56/5 (5投票s)

2007年5月24日

CPOL
viewsIcon

49000

downloadIcon

602

一个 VBScript,用于使用 WMI 收集有关所有域工作站的信息。

引言

这个VBScript脚本枚举域内PC的信息。脚本会提示您输入域的区分名称,然后使用WMI查询所有可用的计算机对象,以获取硬件/软件信息。会创建日志来存储计算机信息和推荐的升级方案(基于内存)。

背景

我们使用这个脚本来收集所有新客户的硬件/软件信息以及戴尔服务标签编号。

Using the Code

请以 dc=your_domain,dc=com 的格式输入您的域的区分名称。

On error resume next

Const ADS_SCOPE_SUBTREE = 2
Set fso = CreateObject("Scripting.FileSystemObject")

set list = fso.CreateTextFile("./output.txt")
Set upgrade = fso.CreateTextFile("./upgrade.txt")

strDomainDn = InputBox("Enter the DN of your domain." & _
			vbCrLf & "(i.e. dc=domain,dc=com)")

If strDomainDn = "" Then
    WScript.Echo "Exiting!"
    WScript.Quit
End If

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"

Set objCOmmand.ActiveConnection = objConnection
objCommand.CommandText = _
    "Select Name, Location from 'LDAP://" & strDomainDn & "' " _
        & "Where objectClass='computer'"  
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 

Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst

Do Until objRecordSet.EOF
    
    ' list.write "Computer Name: " & objRecordSet.Fields("Name").Value
    strComputer = objRecordSet.Fields("Name").Value
    
    Set objShell = CreateObject("WScript.Shell")
    strCommand = "%comspec% /c ping -n 3 -w 1000 " & strComputer & ""
    Set objExecObject = objShell.Exec(strCommand)

    Do While Not objExecObject.StdOut.AtEndOfStream
        strText = objExecObject.StdOut.ReadAll()
        If Instr(strText, "Reply") > 0 Then
            Set objWMIService = GetObject _
                ("winmgmts:\\" & strComputer & "\root\cimv2")
             Set colItems = objWMIService.ExecQuery _
                    ("Select * From Win32_OperatingSystem")  
            Set colItems2 = objWMIService.ExecQuery("Select * from Win32_BIOS",,48)
               ' list.write Err.Description
            Set colItems3 = objWMIService.ExecQuery_
			("Select * from Win32_ComputerSystem",,48)
            Set colItems4 = objWMIService.ExecQuery_
			("SELECT * FROM Win32_Processor", "WQL", _
                         	wbemFlagReturnImmediately + wbemFlagForwardOnly)

            For Each objItem in ColItems
                strOS = objItem.Caption
            Next
            
            For Each objItem in colItems2
                strDellTag = objItem.SerialNumber
                strManu = objItem.Manufacturer
            Next
    
            For Each objItem in colitems3
                strUserName = objItem.Username
                strModel = objItem.Model
                strRAM = objItem.TotalPhysicalMemory
                strTimeZone = (objItem.CurrentTimeZone / 60)
                strDayLightSavings = objItem.DaylightInEffect
            Next
        
            For Each objItem in colitems4
                strProcessor = objItem.Name
            Next
            
            If Err.Number > 0 then
                strErrorSystems =  strComputer & ", " & strErrorSystems 
            Else
                list.write "-----------------------------------------" & vbcrlf & vbcrlf
                list.write "Computer Name: " & strComputer & ", " & strUserName & vbcrlf 
                list.write "-----------------------------------------" & vbcrlf & vbcrlf
                list.write "Operating System: " & strOS & vbcrlf
                list.write "Current User: " & strUserName & vbcrlf
                list.write "::::" & vbcrlf
                list.write "Manufacturer: " & strManu & vbcrlf
                list.write "Model: " & strModel & vbcrlf
                list.write "Dell Service Tag: " & strDellTag & vbcrlf
                list.write "Processor type: " & strProcessor & vbcrlf
                list.write "RAM: " & strRAM & vbcrlf
                list.write "Time Zone: " & strTimeZone & vbcrlf
                list.write "Daylight Savings in effect: " & strDayLightSavings & vbcrlf
                list.write "----------------------------------------" & vbcrlf & vbCrLf
                memory = (strRam/1024)/1024
                memory = Int(memory)
                memory = memory + 2
                
                If strRam < 526454784 Then
                    upgrade.Write strComputer & " has only " & memory & _
			"MB of Ram!  We seriously recommend an upgrade!" _
			& vbCrLf & "Dell Service Tag (if Dell): " & strDellTag
                End If
            End If
                
            'flushes error code from the previous loop
            Err.Clear
       Else
             UnavailableSystems =  strComputer & ", " & UnavailableSystems
       End If
    Loop
    objRecordSet.MoveNext
Loop

list.write "The following systems were unavailable: " & UnavailableSystems & vbcrlf
list.write " " & vbcrlf & vbcrlf
list.write "The following systems were on, but returned an error: " & _
			strErrorSystems & vbcrlf

WScript.Echo "Done!"

关注点

这个脚本非常实用。

历史

  • 上传日期:2007年5月24日
使用WMI收集域内PC信息 - CodeProject - 代码之家
© . All rights reserved.