Here's a snippet of an inventory script I wrote a while back to help illustrate what I was talking (or blabbering) about in this previous blog post. Not as diverse as a Don Hite script, but it does help to show how easy it is to build your own inventory report generator. Oh, and Sam Adams' Cream Stout is mighty tasty! - Enjoy!
Option Explicit
'*****************************************************************
' filename...: inventory.vbs
' author.....: David M. Stein
' date.......: 11/26/2007
' purpose....: query computer to generate inventory log file
' sql........: no thank you. maybe later
'*****************************************************************
Const strComputer = "."
Const logLocalPath = "c:\temp"
Const logLocalFile = "inventory_%COMPUTERNAME%.xml"
Const logUploadPath = "\\server\sharename\logs"
Const LogFileEnabled = True
Const LogUploading = False
Const debugPrinting = True
Const ForReading = 1
Const ForWriting = 2
Dim objWMIService, label, colItems, objItem, logFilePath
Dim objFSO, objFile, t1, t2
'*****************************************************************
DebugPrint "connecting to local WMI repository"
t1 = Now
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
If LogFileEnabled = True Then
logFilePath = logLocalPath & "\" & Replace(logLocalFile, "%COMPUTERNAME%", ComputerName())
DebugPrint "opening local log file for output"
DebugPrint "filename is " & LogFilePath
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile(logFilePath, ForWriting, True)
objFile.WriteLine ""
objFile.WriteLine ""
Else
wscript.echo "(logging is disabled)" & vbCRLF
wscript.echo ""
wscript.echo ""
End If
'*****************************************************************
Audit_ComputerSystem()
Audit_BIOS()
Audit_OS()
Audit_Memory()
Audit_Hotfixes()
'Audit_LogicalDisks()
'Audit_Drivers()
'Audit_LocalUsers()
'Audit_LocalGroups()
'Audit_InstalledSoftware()
'Audit_Services()
'Audit_NetworkAdapters()
'Audit_VideoConfigs()
'*****************************************************************
If LogFileEnabled = True Then
objFile.WriteLine ""
objFile.Close
Set objFile = Nothing
If LogUploading = True Then
TargetPath = logUploadPath & "\" & logLocalFile
objFSO.CopyFile LogFilePath, TargetPath, True
End If
Set objFSO = Nothing
t2 = Now
DebugPrint "inventory scan completed"
DebugPrint "processing time was " & DateDiff("s", t1, t2) & " seconds"
Else
wscript.echo ""
wscript.echo "processing time was " & DateDiff("s", t1, t2) & " seconds"
End If
'*****************************************************************
Sub Audit_ComputerSystem()
DebugPrint "querying computer system"
label = "computersystem"
OpenGroup label
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem",,48)
For Each objItem in colItems
OpenInstance label
PrintElement "Name", objItem.Name
PrintElement "AdminPasswordStatus", objItem.AdminPasswordStatus
PrintElement "AutomaticManagedPagefile", objItem.AutomaticManagedPagefile
PrintElement "AutomaticResetBootOption", objItem.AutomaticResetBootOption
PrintElement "AutomaticResetCapability", objItem.AutomaticResetCapability
PrintElement "BootOptionOnLimit", objItem.BootOptionOnLimit
PrintElement "BootOptionOnWatchDog", objItem.BootOptionOnWatchDog
PrintElement "BootROMSupported", objItem.BootROMSupported
PrintElement "BootupState", objItem.BootupState
PrintElement "Caption", objItem.Caption
PrintElement "ChassisBootupState", objItem.ChassisBootupState
PrintElement "CreationClassName", objItem.CreationClassName
PrintElement "CurrentTimeZone", objItem.CurrentTimeZone
PrintElement "DaylightInEffect", objItem.DaylightInEffect
PrintElement "Description", objItem.Description
PrintElement "DNSHostName", objItem.DNSHostName
PrintElement "Domain", objItem.Domain
PrintElement "DomainRole", objItem.DomainRole
PrintElement "EnableDaylightSavingsTime", objItem.EnableDaylightSavingsTime
PrintElement "FrontPanelResetStatus", objItem.FrontPanelResetStatus
PrintElement "InfraredSupported", objItem.InfraredSupported
PrintElement "InstallDate", objItem.InstallDate
PrintElement "KeyboardPasswordStatus", objItem.KeyboardPasswordStatus
PrintElement "LastLoadInfo", objItem.LastLoadInfo
PrintElement "Manufacturer", objItem.Manufacturer
PrintElement "Model", objItem.Model
PrintElement "NameFormat", objItem.NameFormat
PrintElement "NetworkServerModeEnabled", objItem.NetworkServerModeEnabled
PrintElement "NumberOfLogicalProcessors", objItem.NumberOfLogicalProcessors
PrintElement "NumberOfProcessors", objItem.NumberOfProcessors
PrintElement "PartOfDomain", objItem.PartOfDomain
PrintElement "PauseAfterReset", objItem.PauseAfterReset
PrintElement "PCSystemType", objItem.PCSystemType
PrintElement "PowerManagementSupported", objItem.PowerManagementSupported
PrintElement "PowerOnPasswordStatus", objItem.PowerOnPasswordStatus
PrintElement "PowerState", objItem.PowerState
PrintElement "PowerSupplyState", objItem.PowerSupplyState
PrintElement "PrimaryOwnerContact", objItem.PrimaryOwnerContact
PrintElement "PrimaryOwnerName", objItem.PrimaryOwnerName
PrintElement "ResetCapability", objItem.ResetCapability
PrintElement "ResetCount", objItem.ResetCount
PrintElement "ResetLimit", objItem.ResetLimit
PrintElement "Status", objItem.Status
PrintElement "SystemStartupDelay", objItem.SystemStartupDelay
PrintElement "SystemStartupSetting", objItem.SystemStartupSetting
PrintElement "SystemType", objItem.SystemType
PrintElement "ThermalState", objItem.ThermalState
PrintElement "TotalPhysicalMemory", objItem.TotalPhysicalMemory
PrintElement "UserName", objItem.UserName
PrintElement "WakeUpType", objItem.WakeUpType
PrintElement "Workgroup", objItem.Workgroup
CloseInstance label
Next
CloseGroup label
End Sub
Sub Audit_BIOS()
DebugPrint "querying bios"
label = "bios_setting"
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_BIOS",,48)
OpenGroup label
For Each objItem in colItems
OpenInstance label
PrintElement "Name", objItem.Name
PrintElement "BuildNumber", objItem.BuildNumber
' PrintElement "Caption", objItem.Caption
PrintElement "CodeSet", objItem.CodeSet
PrintElement "CurrentLanguage", objItem.CurrentLanguage
' PrintElement "Description", objItem.Description
PrintElement "IdentificationCode", objItem.IdentificationCode
PrintElement "InstallableLanguages", objItem.InstallableLanguages
PrintElement "InstallDate", objItem.InstallDate
PrintElement "LanguageEdition", objItem.LanguageEdition
PrintElement "Manufacturer", objItem.Manufacturer
PrintElement "OtherTargetOS", objItem.OtherTargetOS
PrintElement "PrimaryBIOS", objItem.PrimaryBIOS
PrintElement "ReleaseDate", objItem.ReleaseDate
PrintElement "SerialNumber", objItem.SerialNumber
PrintElement "SMBIOSBIOSVersion", objItem.SMBIOSBIOSVersion
PrintElement "SMBIOSMajorVersion", objItem.SMBIOSMajorVersion
PrintElement "SMBIOSMinorVersion", objItem.SMBIOSMinorVersion
PrintElement "SMBIOSPresent", objItem.SMBIOSPresent
PrintElement "SoftwareElementID", objItem.SoftwareElementID
PrintElement "SoftwareElementState", objItem.SoftwareElementState
PrintElement "Status", objItem.Status
PrintElement "TargetOperatingSystem", objItem.TargetOperatingSystem
PrintElement "Version", objItem.Version
Next
CloseGroup label
End Sub
Sub Audit_OS()
DebugPrint "querying operating system"
label = "operating_system"
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem",,48)
OpenGroup label
For Each objItem in colItems
OpenInstance label
PrintElement "Name", objItem.Name
PrintElement "BootDevice", objItem.BootDevice
PrintElement "BuildNumber", objItem.BuildNumber
PrintElement "BuildType", objItem.BuildType
PrintElement "Caption", objItem.Caption
PrintElement "CodeSet", objItem.CodeSet
PrintElement "CountryCode", objItem.CountryCode
PrintElement "CreationClassName", objItem.CreationClassName
PrintElement "CSCreationClassName", objItem.CSCreationClassName
PrintElement "CSDVersion", objItem.CSDVersion
PrintElement "CSName", objItem.CSName
PrintElement "CurrentTimeZone", objItem.CurrentTimeZone
PrintElement "DataExecutionPrevention_32BitApplications", objItem.DataExecutionPrevention_32BitApplications
PrintElement "DataExecutionPrevention_Available", objItem.DataExecutionPrevention_Available
PrintElement "DataExecutionPrevention_Drivers", objItem.DataExecutionPrevention_Drivers
PrintElement "DataExecutionPrevention_SupportPolicy", objItem.DataExecutionPrevention_SupportPolicy
PrintElement "Debug", objItem.Debug
PrintElement "Description", objItem.Description
PrintElement "Distributed", objItem.Distributed
PrintElement "EncryptionLevel", objItem.EncryptionLevel
PrintElement "ForegroundApplicationBoost", objItem.ForegroundApplicationBoost
PrintElement "FreePhysicalMemory", objItem.FreePhysicalMemory
PrintElement "FreeSpaceInPagingFiles", objItem.FreeSpaceInPagingFiles
PrintElement "FreeVirtualMemory", objItem.FreeVirtualMemory
PrintElement "InstallDate", objItem.InstallDate
PrintElement "LargeSystemCache", objItem.LargeSystemCache
PrintElement "LastBootUpTime", objItem.LastBootUpTime
PrintElement "LocalDateTime", objItem.LocalDateTime
PrintElement "Locale", objItem.Locale
PrintElement "Manufacturer", objItem.Manufacturer
PrintElement "MaxNumberOfProcesses", objItem.MaxNumberOfProcesses
PrintElement "MaxProcessMemorySize", objItem.MaxProcessMemorySize
PrintElement "NumberOfLicensedUsers", objItem.NumberOfLicensedUsers
PrintElement "NumberOfProcesses", objItem.NumberOfProcesses
PrintElement "NumberOfUsers", objItem.NumberOfUsers
PrintElement "OperatingSystemSKU", objItem.OperatingSystemSKU
PrintElement "Organization", objItem.Organization
PrintElement "OSArchitecture", objItem.OSArchitecture
PrintElement "OSLanguage", objItem.OSLanguage
PrintElement "OSProductSuite", objItem.OSProductSuite
PrintElement "OSType", objItem.OSType
PrintElement "OtherTypeDescription", objItem.OtherTypeDescription
PrintElement "PAEEnabled", objItem.PAEEnabled
PrintElement "PlusProductID", objItem.PlusProductID
PrintElement "PlusVersionNumber", objItem.PlusVersionNumber
PrintElement "Primary", objItem.Primary
PrintElement "ProductType", objItem.ProductType
PrintElement "QuantumLength", objItem.QuantumLength
PrintElement "QuantumType", objItem.QuantumType
PrintElement "RegisteredUser", objItem.RegisteredUser
PrintElement "SerialNumber", objItem.SerialNumber
PrintElement "ServicePackMajorVersion", objItem.ServicePackMajorVersion
PrintElement "ServicePackMinorVersion", objItem.ServicePackMinorVersion
PrintElement "SizeStoredInPagingFiles", objItem.SizeStoredInPagingFiles
PrintElement "Status", objItem.Status
PrintElement "SuiteMask", objItem.SuiteMask
PrintElement "SystemDevice", objItem.SystemDevice
PrintElement "SystemDirectory", objItem.SystemDirectory
PrintElement "SystemDrive", objItem.SystemDrive
PrintElement "TotalSwapSpaceSize", objItem.TotalSwapSpaceSize
PrintElement "TotalVirtualMemorySize", objItem.TotalVirtualMemorySize
PrintElement "TotalVisibleMemorySize", objItem.TotalVisibleMemorySize
PrintElement "Version", objItem.Version
PrintElement "WindowsDirectory", objItem.WindowsDirectory
CloseInstance label
Next
CloseGroup label
End Sub
Sub Audit_Memory()
DebugPrint "querying memory"
label = "memory_device"
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PhysicalMemory",,48)
OpenGroup label
For Each objItem in colItems
OpenInstance label
PrintElement "BankLabel", objItem.BankLabel
PrintElement "Capacity", objItem.Capacity
PrintElement "Caption", objItem.Caption
PrintElement "CreationClassName", objItem.CreationClassName
PrintElement "DataWidth", objItem.DataWidth
PrintElement "Description", objItem.Description
PrintElement "DeviceLocator", objItem.DeviceLocator
PrintElement "FormFactor", objItem.FormFactor
PrintElement "HotSwappable", objItem.HotSwappable
PrintElement "InstallDate", objItem.InstallDate
PrintElement "InterleaveDataDepth", objItem.InterleaveDataDepth
PrintElement "InterleavePosition", objItem.InterleavePosition
PrintElement "Manufacturer", objItem.Manufacturer
PrintElement "MemoryType", objItem.MemoryType
PrintElement "Model", objItem.Model
PrintElement "Name", objItem.Name
PrintElement "OtherIdentifyingInfo", objItem.OtherIdentifyingInfo
PrintElement "PartNumber", objItem.PartNumber
PrintElement "PositionInRow", objItem.PositionInRow
PrintElement "PoweredOn", objItem.PoweredOn
PrintElement "Removable", objItem.Removable
PrintElement "Replaceable", objItem.Replaceable
PrintElement "SerialNumber", objItem.SerialNumber
PrintElement "SKU", objItem.SKU
PrintElement "Speed", objItem.Speed
PrintElement "Status", objItem.Status
PrintElement "Tag", objItem.Tag
PrintElement "TotalWidth", objItem.TotalWidth
PrintElement "TypeDetail", objItem.TypeDetail
PrintElement "Version", objItem.Version
CloseInstance label
Next
CloseGroup label
End Sub
Sub Audit_Hotfixes()
DebugPrint "querying hotfixes"
label = "hotfix"
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_QuickFixEngineering",,48)
OpenGroup label
For Each objItem in colItems
OpenInstance label
PrintElement "HotFixID", objItem.HotFixID
PrintElement "Caption", objItem.Caption
PrintElement "CSName", objItem.CSName
PrintElement "Description", objItem.Description
PrintElement "FixComments", objItem.FixComments
PrintElement "InstallDate", objItem.InstallDate
PrintElement "InstalledBy", objItem.InstalledBy
PrintElement "InstalledOn", objItem.InstalledOn
PrintElement "Name", objItem.Name
PrintElement "ServicePackInEffect", objItem.ServicePackInEffect
PrintElement "Status", objItem.Status
CloseInstance label
Next
CloseGroup label
End Sub
'*****************************************************************
Function ComputerName()
Dim wshNetwork, retval
Set wshNetwork = CreateObject("Wscript.Network")
retval = wshNetwork.ComputerName
Set wshNetwork = Nothing
ComputerName = retval
End Function
'*****************************************************************
Sub OpenGroup(v)
If LogFileEnabled = True Then
objFile.WriteLine "<" & v & "s>"
Else
wscript.echo "<" & v & "s>"
End If
End Sub
'*****************************************************************
Sub CloseGroup(v)
If LogFileEnabled = True Then
objFile.WriteLine ""
Else
wscript.echo ""
End If
End Sub
'*****************************************************************
Sub OpenInstance(v)
If LogFileEnabled = True Then
objFile.WriteLine vbTab & "<" & v & ">"
Else
wscript.echo vbTab & "<" & v & ">"
End If
End Sub
'*****************************************************************
Sub CloseInstance(v)
If LogFileEnabled = True Then
objFile.WriteLine vbTab & ""
Else
wscript.echo vbTab & ""
End If
End Sub
'*****************************************************************
Sub PrintElement(strTag, strValue)
If LogFileEnabled = True Then
objFile.WriteLine vbTab & vbTab & ""
Else
wscript.echo vbTab & vbTab & ""
End If
End Sub
'*****************************************************************
Sub DebugPrint(s)
If DebugPrinting = True Then
wscript.echo Now & vbTab & s
End If
End Sub
No comments:
Post a Comment