Break On
; print the header
'Drv Capacity Free <!>' ?
;=====================================================
; Define the name of your test computer
; (later, enumerate a list of computers in a loop)
; $Computer = 'COMPUTER'
If Open(3, "C:\servers.TXT") = 0
$Computer = ReadLine(3)
While Not @ERROR
; reporting code goes here... YES - THE CODE THAT DOES THE WORK!!
; load the array from the computer
$aSysInfo = WMISysInfo($Computer)
@SERROR ?
UBound($aSysInfo) ?
If UBound($aSysInfo) = -1
'Bad computer name or no access! (' $Computer ')' ?
Else
$Computer ?
; Examine the disk drives & capacities
$D_Letters = Split($aSysInfo[32], ',')
$D_Capacities = Split($aSysInfo[33], ',')
$D_FreeSpace = Split($aSysInfo[34], ',')
For $Index = 0 to UBound($D_Letters)
Left($D_Letters[$Index] + ' ', 4) ; 15 spaces between quotes
Right(' ' + Int(CDbl($D_Capacities[$Index]) / 1048576.0), 15)
Right(' ' + Int(CDbl($D_FreeSpace[$Index]) / 1048576.0), 15)
If CDbl($D_FreeSpace[$Index]) < 500000
' <Low!>'
EndIf
?
Next
EndIf
$Computer = ReadLine(3)
Loop
$ = Close(3)
Else
@SERROR ?
EndIf
;=====================================================
; ==========================================================
; UDF Follows
; ==========================================================
;;
;;======================================================================
;;
;;FUNCTION WMISysInfo()
;;
;;ACTION Returns an array containing system information
;; from local or remote system
;;
;;AUTHOR Glenn Barnas
;;
;;VERSION 1.0 / 2007/10/20 - First release
;;
;;SYNTAX WMISysInfo([host] [,AuthPtr])
;;
;;PARAMETERS host - OPTIONAL - name of system to query
;;
;; AuthPtr - OPTIONAL - pre-authenticated WMI object pointer
;; Use WMIAuthentication() udf to create the AuthPtr value
;; AuthPtr is not needed if user has admin rights
;;
;;REMARKS Replaced independent OSInfo and HWInfo UDFs
;;
;;RETURNS 40 element array
;; 0 short/full operating system description
;; 1 kernel description (Win2K, WinXP, Win2K3, Vista)
;; 2 operating system role (workstation, member server, domain controller)
;; 3 operating system service pack level
;; 4 operating system build level
;; 5 uni/multi-processor type
;; 6 Computer Name
;; 7 registered owner,organization
;; 8 Serial Number
;; 9 Install Date - YYYY/MM/DD hh:mm:ss
;; 10 Local Date/Time - YYYY/MM/DD hh:mm:ss
;; 11 Last Boot Time - YYYY/MM/DD hh:mm:ss
;; 12 TimeZone info (Std, Daylight, Bias)
;; 13 Primary Domain Affiliation
;; 14 Installed Hotfix list
;; 15 OS Version (numeric)
;; 16 Future Use
;; 17 O/S Architecture
;; 18 Install Method (Clean, Upgrade, SysPrep)
;; 19 RAM/PageFile Info (location MinSize MaxSize)
;; 20 System Brand
;; 21 System Model
;; 22 System S/N
;; 23 System BIOS Revision
;; 24 Processor Type
;; 25 Processor Speed
;; 26 Processor Count (Physical)
;; 27 Processor Count (Logical)
;; 28 Processor Cores
;; 29 Physical Memory
;; 30 Fixed-Disk Labels, null if none
;; 31 Fixed-Disk Mount Point ("d:\" for drives, path for mounted volumes) (2K3 & higher)
;; 32 Fixed-Disk Drives (A:-Z:, or "MV:" for mounted Volumes)
;; 33 Fixed-Disk Capacities, bytes
;; 34 Fixed-Disk FreeSpace, bytes
;; 35 CD-ROM Disk List
;; 36 Connected Network Drives
;; 37 Hardware Architecture
;; 38 Future Use
;; 39 Future Use
;;
;;DEPENDENCIES WMI support
;;
;;TESTED WITH W2K, WXP, W2K3, Vista, X64
;;
;;EXAMPLES $Host = ''
;; $aHWI = WMIHWInfo($Host)
;; $Host ' has ' $aHWI[6] ' Physical/Logical processors!'
;;
;; $Host = 'server'
;; $objWMI = WMIAuthenticate('computer', 'userid', 'User-P@ss!')
;; $Up = WMIUptime($Host, $objWMI)
;; 'Secure host ' $Host ' has been up for ' $Up[0] ' days!'
;
Function WMISysInfo(OPTIONAL $_Target, OPTIONAL $_pAuth)
Dim $objWMIService, $colItems, $objItem ; WMI object vars
Dim $_SI[39] ; Var for return array
Dim $_, $_Delim, $_SRoot, $_WFile, $_OSVer
$_Target = IIf($_Target, $_Target, '.')
If InStr($_Target, '\') $_Target = Join(Split($_Target, '\'), '') EndIf
If $_pAuth
$objWMIService = $_pAuth
Else
$objWMIService = GetObject('winmgmts:{impersonationLevel=impersonate}!\\' + $_Target + '\root\cimv2')
If @ERROR Exit Val('&' + Right(DecToHex(@ERROR), 4)) EndIf
EndIf
; O/S SECTION #######################################################
; OperatingSystem =======================================================
$colItems = $objWMIService.ExecQuery("Select * from Win32_OperatingSystem",,48)
For Each $objItem in $colItems
$_SRoot = '\\' + $_Target + '\' + Join(Split($objItem.SystemDirectory, ':'), Chr(36)) + '\'
$_SI[0] = Trim(Split($objItem.Name, '|')[0])
$_SI[15] = $objItem.Version
$_ = _osid($_SI[0], $_SI[15]) ; get kernel name, fix OS name
$_SI[0] = $_[0]
$_SI[1] = $_[1]
$_OSVer = Trim(Join(Split($_SI[15], '.', 2), '.'))
$_ = Split($objItem.CSDVersion, ' ')
$_SI[3] = $_[UBound($_)]
$_SI[4] = $objItem.BuildNumber
$_SI[5] = $objItem.BuildType
$_SI[6] = $objItem.CSName
$_SI[7] = $objItem.RegisteredUser + '/' + $objItem.Organization
$_SI[8] = $objItem.SerialNumber
; Translate the following in to standard date strings (yyyy/mm/dd hh:mm:ss)
$_ = $objItem.InstallDate
$_SI[9] = Left($_, 4) + '/' + SubStr($_, 5, 2) + '/' + SubStr($_, 7, 2) + ' '
+ SubStr($_, 9, 2) + ':' + SubStr($_, 11, 2) + ':' + SubStr($_, 13, 2)
$_ = $objItem.LocalDateTime
$_SI[10] = Left($_, 4) + '/' + SubStr($_, 5, 2) + '/' + SubStr($_, 7, 2) + ' '
+ SubStr($_, 9, 2) + ':' + SubStr($_, 11, 2) + ':' + SubStr($_, 13, 2)
$_ = $objItem.LastBootUpTime
$_SI[11] = Left($_, 4) + '/' + SubStr($_, 5, 2) + '/' + SubStr($_, 7, 2) + ' '
+ SubStr($_, 9, 2) + ':' + SubStr($_, 11, 2) + ':' + SubStr($_, 13, 2)
$_ = $objItem.OSArchitecture
$_SI[17] = IIf($_, $_, '32-bit')
Next
$colItems = 0
; Time Zone =======================================================
$colItems = $objWMIService.ExecQuery("Select * from Win32_TimeZone",,48)
For Each $objItem in $colItems
$_SI[12] = $objItem.StandardName + ' / ' + $objItem.DaylightName + ' / ' + Abs($objItem.Bias) / 60
Next
$colItems = 0
; Domain =======================================================
$colItems = $objWMIService.ExecQuery("Select * from Win32_NTDomain",,48)
For Each $objItem in $colItems
$_SI[13] = $objItem.DNSForestName + ',' + $objItem.DomainName
Next
$colItems = 0
; Hotfixes =======================================================
$colItems = $objWMIService.ExecQuery("Select * from Win32_QuickFixEngineering",,48)
For Each $objItem in $colItems
If InStr('KQ', Left($objItem.HotFixID, 1))
$_SI[14] = $_SI[14] + ' ' + $objItem.HotFixID
EndIf
Next
$_SI[14] = SubStr($_SI[14], 2) ; trim result
$colItems = 0
; PageFile =======================================================
$colItems = $objWMIService.ExecQuery("Select * from Win32_PageFile",,48)
For Each $objItem in $colItems
$_SI[19] = $_SI[19] + ' ' + $objItem.EightDotThreeFileName + ' ' + $objItem.InitialSize + ' ' + $objItem.MaximumSize
Next
$colItems = 0
; Check for build status
$_SI[18] = 'Clean'
$_WFile = $_SRoot + Chr(36) + 'winnt' + Chr(36) + '.inf'
If Exist($_WFile)
If ReadProfileString($_WFile, 'Data', 'StandardServerUpgrade') = 'yes' Or
ReadProfileString($_WFile, 'Data', 'WinNtUpgrade') = 'yes'
$_SI[18] = 'Upgrade'
EndIf
If ReadProfileString($_WFile, 'Unattended', 'InstallFilesPath')
$_SI[18] = 'SysPrep'
EndIf
EndIf
; HARDWARE SECTION #######################################################
; ComputerSystem =======================================================
$colItems = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem",,48)
For Each $objItem in $colItems
$_ = 'Standalone Workstation', 'Member Workstation', 'Standalone Server', 'Member Server', 'Backup Domain Controller', 'Primary Domain Controller'
$_SI[2] = $_[Val($objItem.DomainRole)]
$_SI[37] = Left($objItem.SystemType, 3)
$_SI[20] = $objItem.Manufacturer
$_SI[21] = $objItem.Model
$_SI[26] = $objItem.NumberOfProcessors
$_SI[29] = $objItem.TotalPhysicalMemory
$_ = CInt((CDbl($_SI[29]) + 655360.0) / 1048576.0)
$_SI[19] = '' + $_ + $_SI[19]
Next
$colItems = 0
; BIOS =======================================================
$colItems = $objWMIService.ExecQuery("Select * from Win32_BIOS",,48)
For Each $objItem in $colItems
$_SI[22] = $objItem.SerialNumber
$_Delim = ''
For Each $_ in $objItem.BIOSVersion
$_SI[23] = $_SI[23] + $_Delim + $_
$_Delim = ','
Next
Next
$colItems = 0
; Processor =======================================================
$colItems = $objWMIService.ExecQuery("Select * from Win32_Processor",,48)
For Each $objItem in $colItems
$_SI[24] = Trim($objItem.Name)
$_SI[25] = $objItem.MaxClockSpeed
$_SI[27] = $objItem.NumberOfLogicalProcessors
$_SI[28] = $objItem.NumberOfCores
Next
$colItems = 0
; Disk Storage =======================================================
$colItems = $objWMIService.ExecQuery("Select * from Win32_LogicalDisk",,48)
For Each $objItem in $colItems
If $objItem.DriveType = 3 ; fixed disk
$_SI[30] = $_SI[30] + ',' + $objItem.VolumeName
$_SI[31] = $_SI[31] + ',' + $objItem.Caption + '\'
$_SI[32] = $_SI[32] + ',' + $objItem.Caption
$_SI[33] = $_SI[33] + ',' + $objItem.Size
$_SI[34] = $_SI[34] + ',' + $objItem.FreeSpace
EndIf
If $objItem.DriveType = 5 ; CD-ROM
$_SI[35] = $_SI[35] + ',' + $objItem.Caption
EndIf
If $objItem.DriveType = 4 ; Network Drive
$_SI[36] = $_SI[36] + ',' + $objItem.Caption + '=' + $objItem.ProviderName
EndIf
Next
$colItems = 0
If $_OSVer > 5.1 ; only supported on W2K3 and higher - return mounted volume info
$colItems = $objWMIService.ExecQuery("Select * from Win32_Volume",,48)
For Each $objItem in $colItems
If $objItem.DriveType = 3 And $objItem.DriveLetter = ''
$_SI[30] = $_SI[30] + ',' + $objItem.Label
$_SI[31] = $_SI[31] + ',' + $objItem.Caption
$_SI[32] = $_SI[32] + ',' + 'MV:'
$_SI[33] = $_SI[33] + ',' + $objItem.Capacity
$_SI[34] = $_SI[34] + ',' + $objItem.FreeSpace
EndIf
Next
EndIf
$colItems = 0
; trim leading "," from strings
For $_ = 30 to 36
$_SI[$_] = SubStr($_SI[$_], 2)
Next
; Return the array
$WMISysInfo= $_SI
Exit 0
EndFunction
; _osid - supporting function
; Identifies the release version (beta, RTM, Preview, etc), defines a "kernel short name",
; and removes special characters from the description string
Function _osid($_Vs, $_Vn)
Dim $_
Dim $_Srel ; string of release IDs
Dim $_Vmaj ; Major version number
Dim $_Vmin ; Minor version number
Dim $_Vrel ; Release number
Dim $_aR[1] ; Short (KernelID) name, Descriptive Name
$_ = Split($_Vn + '.0.0', '.', 3)
$_Vmaj = Val($_[0])
$_Vmin = Val($_[1])
$_Vrel = $_[2]
; clean up the O/S description string - remove special chars
$_Vs = Join(Split($_Vs, Chr(153)), '') ; (tm)
$_Vs = Join(Split($_Vs, Chr(169)), '') ; (c)
$_Vs = Join(Split($_Vs, Chr(174)), '') ; (r)
Select
Case $_Vmaj = 5 And $_Vmin = 0 ; Win2K
$_aR[1] = 'Win2K'
$_Srel = '1515=(Beta 2),2031=(Beta 3),2183=(Beta 3),2128=(Beta 3 RC2),2195=(RTM)'
$_ = InStr($_Srel, $_VRel)
If $_
$_ = Split(SubStr($_Srel, $_ + 5), ',')[0]
$_Vs = $_Vs + ' ' + $_
EndIf
Case $_Vmaj = 5 And $_Vmin = 1 ; WinXP
$_aR[1] = 'WinXP'
$_Srel = '2505=(RC1),2600=(RTM)'
$_ = InStr($_Srel, $_VRel)
If $_
$_ = Split(SubStr($_Srel, $_ + 5), ',')[0]
$_Vs = $_Vs + ' ' + $_
EndIf
Case $_Vmaj = 5 And $_Vmin = 2 ; Win2K3
$_aR[1] = 'Win2K3'
$_Srel = '3718=(Eval),3790=(RTM)'
$_ = InStr($_Srel, $_VRel)
If $_
$_ = Split(SubStr($_Srel, $_ + 5), ',')[0]
$_Vs = $_Vs + ' ' + $_
EndIf
Case $_Vmaj = 6 And $_Vmin = 0 ; Vista
$_aR[1] = 'Vista'
$_Srel = '6000=(RTM)'
$_ = InStr($_Srel, $_VRel)
If $_
$_ = Split(SubStr($_Srel, $_ + 5), ',')[0]
$_Vs = $_Vs + ' ' + $_
EndIf
Case 1
$_aR[1] = 'Unknown'
EndSelect
$_aR[0] = $_Vs
$_osid = $_aR
EndFunction