This is still in use, run as a service on each domain PC

 Code:
Break on
$ = SetOption('wrapateol','on')
$ = SetConsole("hide")
$ = RedirectOutput('c:\logfiles\SQLInv.log', 1)
$InvVer = '2012/05/09 - Production Server'

? 
? $InvVer
? @DATE + '	'+ @TIME

$start = @ticks

	$Make 	=Trim(Split(WMIQuery("Manufacturer","Win32_ComputerSystem"))[0])
	$Model	=Trim(WMIQuery("Model","Win32_ComputerSystem"))
	$SerNo	=WMIQuery("SerialNumber","Win32_BIOS")
		If Len($SerNo) < 2 	
			$SerNo=WMIQuery("SerialNumber","Win32_SystemEnclosure")
			If InStr($serno,"|")
				For Each $Return in Split($serno,"|")
					If Len($Return)<10	$serno=$Return		EndIf
					Next
				EndIf
			EndIf
	$SerNo	=Trim(UCase($SerNo))
	If $serNo < '1'		Quit		EndIf

	$asset	=WMIQuery("SMBIOSAssetTag","Win32_SystemEnclosure")
	If InStr($asset,"|")
		For Each $return in Split($asset,"|")
			If $return	$asset=$return		EndIf
		Next
	EndIf

	$asset	= Join(Split($asset,"|"),'')
	$asset	= Trim(UCase($asset))

	$objWMIService = GetObject("winmgmts:\\.\root\cimv2")
	if $objWMIService and not @error
		$colOperatingSystems = $objWMIService.ExecQuery("Select * From Win32_PerfFormattedData_PerfOS_System")
		if $colOperatingSystems and not @error
 			For Each $objOS in $colOperatingSystems
		 	   $uptime = val($objOS.SystemUpTime) / 60 /60
			Next
		endif
	endif


	$CPUsp	=WMIQuery("CurrentClockSpeed","Win32_Processor")
		Select
			Case Left($CPUsp,3) = "339"		$CPUsp=3400
			Case Left($CPUsp,3) = "319"		$CPUsp=3200
			Case Left($CPUsp,3) = "299"  		$CPUsp=3000
			Case Left($CPUsp,3) = "279"		$CPUsp=2800
			Case Left($CPUsp,3) = "269"		$CPUsp=2600
			Case Left($CPUsp,3) = "239"		$CPUsp=2400
			Case Left($CPUsp,3) = "229"		$CPUsp=2200
			Case Left($CPUsp,3) = "220"		$CPUsp=2200
			Case Left($CPUsp,3) = "199"		$CPUsp=2000
   			Case Left($CPUsp,3) = "186"  		$CPUsp=1860
   			Case Left($CPUsp,3) = "182"  		$CPUsp=1830
			Case Left($CPUsp,3) = "179"		$CPUsp=1800
			Case Left($CPUsp,3) = "169"		$CPUsp=1700
			Case Left($CPUsp,3) = "159"		$CPUsp=1600
			Case Left($CPUsp,3) = "139"		$CPUsp=1400
			Case Left($CPUsp,3) = "106"		$CPUsp=1100
			Case Left($CPUsp,2) = "99"		$CPUsp=1000
			Case Left($CPUsp,2) = "90"		$CPUsp=900
			Case Left($CPUsp,2) = "85"		$CPUsp=850
			Case Left($CPUsp,2) = "70"		$CPUsp=700
			Case Left($CPUsp,2) = "66"		$CPUsp=667
			Case Left($CPUsp,2) = "59"		$CPUsp=600
			Case Left($CPUsp,2) = "49"		$CPUsp=500
			Case Left($CPUsp,2) = "39"		$CPUsp=400
			EndSelect

	$dimms	=Split(WMIQuery("Capacity","Win32_PhysicalMemory"),"|")
		For $a=0 to UBound($dimms)
			$=Execute("$$dimm$a=val($$dimms[$a]) / 1048576")
			$=Execute("$$memory=val($$Memory)+val($$dimm$a)")
		Next

	$nic=0
	Do
		$ip 	= EnumIPInfo($nic,0)
		$snm	= EnumIPInfo($nic,1)
		$NicDesc= EnumIPInfo($nic,2)
		$mygw	= EnumIPInfo($nic,3)
		$nic=Val($nic)+1
	Until InStr($ip,'192.168.') Or InStr($ip,'192.168.24') Or InStr($ip,'192.168.201.') Or Val($nic) > 10
	
	$network = Left($ip,InStrRev($ip,'.'))

	$Mac	=WMIQuery("MACAddress","Win32_NetworkAdapterConfiguration",,"Description",$NicDesc)
	$Mac	=Join(Split($mac,':'),'')
	$Mac	=Join(Split($mac,'|'),'')


If FindProc(@wksta,'MSASCui.exe')
	If KeyExists('HKLM\SOFTWARE\Microsoft\Microsoft Forefront\Client Security\1.0\AM\Signature Updates')
		$AVProgram	= 'Microsoft Forefront Client' 
		$AVEngine	= ReadValue('HKLM\SOFTWARE\Microsoft\Microsoft Forefront\Client Security\1.0\AM\Signature Updates','EngineVersion')
		$AVSignature	= ReadValue('HKLM\SOFTWARE\Microsoft\Microsoft Forefront\Client Security\1.0\AM\Signature Updates','AVSignatureVersion')
	EndIf
EndIf

	$MSOdir	=ReadValue("HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\excel.exe","Path")
	$excel	=GetFileVersion("$MSOdir\excel.exe")
	$MSOVer =Split($excel,'.')[0]

	$MSOSPVer = ''

	$assigned = ReadValue("HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters","srvcomment")
	If Left($assigned,2) = '68'
		$assigned = Left(Right(Join(Split(Join(Split($assigned,' '),''),'-'),''),-2),9)
	EndIf

	$ini = 0


$cnstring = "DRIVER={SQL Server};SERVER=SQLServer;UID=Inventory;PWD=password;DATABASE=InvDB"

$cn = CreateObject("ADODB.Connection")
$cmd= CreateObject("ADODB.Command")
$rs = CreateObject("ADODB.RecordSet")

$cn.connectionstring = $cnstring
$cn.open
$cmd.activeconnection = $cn
$rs.cursortype = 3
$rs.locktype = 3
$rs.activecommand = $cmd

$cmdtxt = "select * from dbo._tbl_Main where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt $rs.open ($cmd)			;? 'Error = '+@ERROR+' - '+@SERROR
	If $rs.eof = -1		$rs.addnew	EndIf 

	$rs.fields.item("SerialNumber").value  = $serNo
	$rs.fields.item("ComputerName").value  = @wksta
	$rs.fields.item("AssignedTo").value    = $assigned
	$rs.fields.item("NetworkID").value     = $network
	$rs.fields.item("IPAddress").value     = $ip
	$rs.fields.item("InvDate").value       = @date
	$rs.fields.item("Version").value       = $InvVer
	$rs.fields.item("MacAddr").value       = $Mac
	$rs.fields.item("Uptime").value        = $uptime

$rs.update							;? 'Error = '+@ERROR+' - '+@SERROR
;if not @error
	$nul = WriteValue('HKLM\SOFTWARE\Information Technology\SQLInventory','LastRun',@date,REG_SZ)
;endif
$rs.close

$cmdtxt = "select * from dbo._tbl_OSEnv where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt $rs.open ($cmd)			;? 'Error = '+@ERROR+' - '+@SERROR
	If $rs.eof = -1		$rs.addnew	EndIf 

	$rs.fields.item("SerialNumber").value	= $serNo
	$rs.fields.item("OS").value 		= @ProductType
	$rs.fields.item("OSCSD").value		= @csd
	$rs.fields.item("64bit").value		= @OnWoW64
	$rs.fields.item("AVProgram").value	= $AVProgram
	$rs.fields.item("AVEngine").value	= $AVEngine
	$rs.fields.item("AVSignature").value	= $AVSignature
	$rs.fields.item("MSO").value		= $MSOVer
	$rs.fields.item("MSOSP").value		= $MSOSPVer
$rs.update							? 'Error = '+@ERROR+' - '+@SERROR
$rs.close



$cmdtxt = "select * from dbo._tbl_OrgCodes where OrgCode = '$Asset'"
$cmd.commandtext = $cmdtxt $rs.open ($cmd)			;? 'Error = '+@ERROR+' - '+@SERROR
	$code = IIf($rs.eof = -1,1,0)
$rs.close							;? 'Error = '+@ERROR+' - '+@SERROR



$cmdtxt = "select * from dbo._tbl_Computers where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt $rs.open ($cmd)			;? 'Error = '+@ERROR+' - '+@SERROR
	If $rs.eof = -1
		$rs.addnew 

		$rs.fields.item("SerialNumber").value	= $serNo
		If $code = 1
			$rs.fields.item("Tag").value= $asset	
		Else
			$rs.fields.item("OrgCode").value= $asset
		EndIf
		$rs.fields.item("Make").value		= $Make 	
		$rs.fields.item("Model").value		= $Model	
		$rs.fields.item("CPU").value		= $CPUsp
		$rs.fields.item("FirstInventory").value = @date
		$rs.update					;? 'Error = '+@ERROR+' - '+@SERROR
		;if not @error
			$nul = WriteValue('HKLM\SOFTWARE\Information Technology\SQLInventory','FirstRun',@date,REG_SZ)
		;endif
	Else
		If Val($rs.fields.item("Memory").value) <> $memory
			$rs.fields.item("Memory").value		=  Abs(CDbl(Val($memory)))
			$rs.update				;? 'Error = '+@ERROR+' - '+@SERROR
		EndIf

		If $rs.fields.item("Tag").value < '0' And $code = 1
			$rs.fields.item("Tag").value= $asset	
			$rs.update				;? 'Error = '+@ERROR+' - '+@SERROR
		EndIf

		If $rs.fields.item("OrgCode").value < '0' And $code = 0
			$rs.fields.item("OrgCode").value= $asset
			$rs.update				;? 'Error = '+@ERROR+' - '+@SERROR
		EndIf

		If $rs.fields.item("FirstInventory").value < '0'
			$rs.fields.item("FirstInventory").value = @date
			$rs.update				;? 'Error = '+@ERROR+' - '+@SERROR
		EndIf
	EndIf
$rs.close

; *********************** Monitor Inventory ***************************************
$cmdtxt = "Delete from dbo._tbl_Monitors where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt ? $cmdtxt 
$rs.Open($cmd) 				? 'Mon Del-Open: Error = ' + @ERROR + ' - ' + @SERROR
$rs.close 						? 'Mon Del-Close: Error = ' + @ERROR + ' - ' + @SERROR

$cmdtxt = "select * from dbo._tbl_Monitors where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt $rs.open ($cmd)			;? 'Error = '+@ERROR+' - '+@SERROR
	$wmiColl = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select * FROM Win32_DesktopMonitor Where ScreenWidth>'0'")
	For Each $wmiObj in $wmiColl
		$pnpid = $wmiObj.PNPDeviceID
		If $pnpid > 'a'
			If InStr($pnpid,'\')
				$monModel = Split($pnpid,'\')[1]
			Else
				$monModel = 'Unknown'
			EndIf
			$res = CStr($wmiObj.ScreenWidth) + "x" + CStr($wmiObj.ScreenHeight)
			$rs.addnew
			$rs.fields.item("SerialNumber").value		= $Serno 
			$rs.fields.item("MonitorModel").value		= $MonModel 
			$rs.fields.item("Resolution").value		= $res
			$rs.fields.item("InvDate").value		= @date
			$rs.update  ? 'Mon Add-Update: Error = ' + @ERROR + ' - ' + @SERROR
		EndIf
	Next
$rs.close 			? 'Mon Add-Close: Error = ' + @ERROR + ' - ' + @SERROR
$wmiColl=''

; *********************** Memory Inventory ***************************************
; ********  http://msdn.microsoft.com/en-us/library/aa394347(VS.85).aspx  ********
$cmdtxt = "Delete from dbo._tbl_Memory where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt  	? $cmdtxt 
$rs.Open($cmd) 					? 'Mem Del-Open: Error = '+@ERROR+' - '+@SERROR
$rs.close 							? 'Mem Del-Close: Error = '+@ERROR+' - '+@SERROR

$cmdtxt = "select * from dbo._tbl_Memory where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt 	? $cmdtxt 
$rs.open ($cmd)					? 'Mem Add-Open: Error = '+@ERROR+' - '+@SERROR
	$wmiColl = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select * FROM Win32_PhysicalMemory")
	For Each $wmiObj in $wmiColl
		$rs.addnew
		$rs.fields.item("SerialNumber").value		= $Serno 
		$rs.fields.item("DeviceLocator").value		= $wmiObj.DeviceLocator 
		$rs.fields.item("Capacity").value		= Abs(CDbl(Val($wmiObj.Capacity))/1024/1024)
		$rs.fields.item("Speed").value			= $wmiObj.Speed
		$rs.fields.item("FormFactor").value		= $wmiObj.FormFactor
		$rs.fields.item("MemoryType").value		= $wmiObj.MemoryType
		$rs.fields.item("InvDate").value		= @date
		$rs.update  ? 'Mem Add-Update: Error = ' + @ERROR + ' - ' + @SERROR
	Next
$rs.close 			? 'Mem Add-Close: Error = '+@ERROR+' - '+@SERROR
$wmiColl=''

; *********************** Disk Drive Inventory ***************************************
; ********  http://msdn.microsoft.com/en-us/library/aa394347(VS.85).aspx  ********
$cmdtxt = "Delete from dbo._tbl_DiskDrive where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt		 ? $cmdtxt
$rs.Open($cmd) 			? 'Disk Del-Open: Error = '+@ERROR+' - '+@SERROR
$rs.close 					? 'Disk Del-Close: Error = '+@ERROR+' - '+@SERROR

$cmdtxt = "select * from dbo._tbl_DiskDrive where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt 	? $cmdtxt
$rs.open ($cmd)					? 'Disk Add-Open: Error = ' + @ERROR + ' - ' + @SERROR
	$wmiColl = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select * FROM Win32_DiskDrive where MediaLoaded='-1'")
	For Each $wmiObj in $wmiColl
		$rs.addnew
		$rs.fields.item("SerialNumber").value		= $Serno 
		$rs.fields.item("DriveSize").value		= Round(CDbl($wmiObj.Size)/1000/1000/1000)
		$rs.fields.item("InterfaceType").value		= $wmiObj.InterfaceType
		$rs.fields.item("Model").value			= $wmiObj.Model
		$rs.fields.item("Status").value			= $wmiObj.Status
		$rs.fields.item("InvDate").value		= @date
		$rs.update 			? 'Disk Add-Update: Error = ' + @ERROR + ' - ' + @SERROR
	Next
$rs.close 					? 'Disk Add-Close: Error = ' + @ERROR + ' - ' + @SERROR

; *********************** Software Inventory ***************************************
$cmdtxt = "Delete from dbo._tbl_Software where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt 
$rs.Open($cmd) 			;? 'Error = '+@ERROR+' - '+@SERROR
$rs.close 			;? 'Error = '+@ERROR+' - '+@SERROR

$cmdtxt = "select * from dbo._tbl_Software where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt $rs.open ($cmd)			;? 'Error = '+@ERROR+' - '+@SERROR

$Index = 0	$err = 0	$key = "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
Do
	$SubKey = EnumKey($Key, $Index)
	If @ERROR = 0
		If Not Left($subkey,'2') = 'KB'
			$DisplayName 	= ReadValue($key+$subKey,'DisplayName')
			$DisplayVersion = ReadValue($key+$subKey,'DisplayVersion')
			$InstallDate 	= ReadValue($key+$subKey,'InstallDate')
			$InstallLocation= ReadValue($key+$subKey,'InstallLocation')
			$Publisher 	= ReadValue($key+$subKey,'Publisher')

			If Not $DisplayName + $DisplayVersion + $InstallDate + $InstallLocation + $Publisher < 'a'	
				$rs.addnew
				$rs.fields.item("SerialNumber").value		= $Serno 
				$rs.fields.item("RegKeyName").value		= $SubKey 
				$rs.fields.item("DisplayName").value		= $DisplayName	
				$rs.fields.item("DisplayVersion").value		= $DisplayVersion	
				$rs.fields.item("InstallDate").value		= $InstallDate
				$rs.fields.item("InstallLocation").value 	= $InstallLocation
				$rs.fields.item("Publisher").value		= $Publisher
				$rs.fields.item("InvDate").value      		= @date
				$rs.update
			EndIf
		EndIf
		$Index = $Index + 1
	Else
		$err = 1
	EndIf
Until $err
$rs.close

; *********************** MSO Sessions Inventory ***************************************
$cmdtxt = "Delete from dbo._tbl_MSOSessions where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt 
$rs.Open($cmd) 			;? 'Error = '+@ERROR+' - '+@SERROR
$rs.close 			;? 'Error = '+@ERROR+' - '+@SERROR

$cmdtxt = "select * from dbo._tbl_MSOSessions where SerialNumber = '$serNo'"
$cmd.commandtext = $cmdtxt $rs.open($cmd) 		;? 'Error = '+@ERROR+' - '+@SERROR

	$getobj = GetObject("winmgmts:{impersonationLevel=impersonate}!//.")
	$backup = $getobj.ExecQuery("Select * From Win32_NTLogEvent Where Logfile='osession' and eventcode='7000'") ;and message like 'id: 2%'
	
	For Each $event in $backup
		$ec = $event.EventIdentifier
		$time = $event.TimeGenerated
		$year = SubStr($time, 1, 4) $Hour = SubStr($time, 9, 2)
		$month = SubStr($time, 5, 2) $min = SubStr($time, 11, 2)
		$day = SubStr($time, 7, 2) $sec = SubStr($time, 13, 2)
		$message = $event.message
		$user= $event.user
		$Msg = Split($message, ",")
	
		$rs.addnew
		$rs.fields.item("SerialNumber").value = $Serno 
		$rs.fields.item("EventID").value = $ec 
		$rs.fields.item("UserID").value = Join(Split($user,'fdhc\'),'')	
		$rs.fields.item("Date").value = $year +'/'+ $month +'/'+ $day	
		$rs.fields.item("Time").value = $hour +':'+ $min +':'+ $sec	
		$rs.fields.item("ID").value = Trim(Split($msg[0], ':')[1])
		$rs.fields.item("AppName").value = Trim(Split($msg[1], ':')[1])
		$rs.fields.item("AppVersion").value = Trim(Split($msg[2], ':')[1])
		$rs.fields.item("InvDate").value = @date
	$rs.update
	Next
	
$rs.close


; *********************** Sprint Card Inventory ***************************************
If Exist('c:\logfiles\sprintcard.txt')
	$SprintData = Readfile('c:\logfiles\sprintcard.txt')
	For Each $line in $SprintData
		Select
			Case InStr($line, 'Manufacturer') 	$man = Trim(SubStr($line, InStr($line, ':') + 1))
			Case InStr($line, 'Model') 			$mod = Trim(SubStr($line, InStr($line, ':') + 1))
			Case InStr($line, 'Revision') 		$rev = Trim(SubStr($line, InStr($line, ':') + 1))
			Case InStr($line, 'ESN') 				$esn = Trim(SubStr($line, InStr($line, ':') + 1))
			Case InStr($line, 'Date') 				$date= Trim(SubStr($line, InStr($line, ':') + 1))
		EndSelect
	Next
	If $esn
		$cmdtxt = "select * from dbo._tbl_SprintCards where SerNo = '$SerNo'"
		$cmd.commandtext = $cmdtxt
		$rs.open($cmd) 		$err = @serror
			If $rs.eof = -1 	$rs.addnew 		EndIf 
			$rs.fields.item("SerNo").value = $serno
			$rs.fields.item("ESN").value = $esn
			$rs.fields.item("Manufacturer").value = $man
			$rs.fields.item("Model").value = $mod
			$rs.fields.item("Revision").value = $rev
			$rs.fields.item("InvDate").value = $date
			$rs.update			$err = @serror	
		$rs.close
	EndIf
EndIf

; *********************** Bitlocker Inventory ***************************************
Shell 'cmd /c echo '+@DATE + '> c:\logfiles\bitlocker.txt'
Shell 'cmd /c manage-bde.exe -status >> c:\logfiles\bitlocker.txt'
Shell 'cmd /c manage-bde.exe -protectors -get c: >> c:\logfiles\bitlocker.txt'
If Exist('c:\logfiles\bitlocker.txt')
	$BitData = Readfile('c:\logfiles\bitlocker.txt')
	For $count = 0 to UBound($bitdata) - 1
		$line = $bitdata[$count]
		Select
			Case InStr($line, '[OS Volume]') $Vol = Trim(SubStr($bitdata[$count - 1], InStr($bitdata[$count - 1], ':') - 1, 2))
			Case InStr($line, 'Bitlocker Version') $Ver = Trim(SubStr($line, InStr($line, ':') + 1))
			Case InStr($line, 'Conversion Status') $Con = Trim(SubStr($line, InStr($line, ':') + 1))
			Case InStr($line, 'Encryption Method') $Enc = Trim(SubStr($line, InStr($line, ':') + 1))
			Case InStr($line, 'Key Protectors:') 	
							Do
								$count = $count +1
								If Trim($bitdata[$count]) <> 'Data Recovery Agent (Certificate Based)' And Not InStr($tpm,Trim($bitdata[$count]))
									$TPM = $TPM + "," + Trim($bitdata[$count])
								EndIf
							Until Trim($bitdata[$count + 1]) = ''
							$TPM = SubStr($TPM,2) 
			Case InStr($line, 'External Key file name') $Key = Trim($bitdata[$count + 1])
		EndSelect
	Next
	$data = $vol +', '+$ver + ', ' +$con + ', ' +$enc + ', ' +$tpm + ', ' +$key + ', ' +@DATE
	Shell 'cmd /c echo "' + $data + '" >> c:\logfiles\bitlocker.txt'
	
	If $vol
		$cmdtxt = "select * from dbo._tbl_bitlocker where SerialNumber = '$SerNo'"
		$cmd.commandtext = $cmdtxt
		$rs.open($cmd) $err = @serror
			Shell 'cmd /c echo open: ' + $err + '>> c:\logfiles\bitlocker.txt'
			If $rs.eof = -1 	$rs.addnew 		EndIf 
			$rs.fields.item("SerialNumber").value = $serno
			$rs.fields.item("Volume").value = $vol
			$rs.fields.item("Version").value = $ver
			$rs.fields.item("Conversion").value = $Con
			$rs.fields.item("Encryption").value = $enc
			$rs.fields.item("Protection").value = $TPM
			$rs.fields.item("Keys").value = $key
			$rs.fields.item("InvDate").value = @date
			$rs.update $err = @serror	
			Shell 'cmd /c echo update: ' + $err + '>> c:\logfiles\bitlocker.txt'
		$rs.close
	EndIf
EndIf

;**************************************************************************************************

Function ReadFile($file)
	Dim $lf, $f, $_, $t
	$lf = Chr(10)
	$f = FreeFileHandle
	$_ = Open($f, $file, 2)
	If @error Exit 1 EndIf
	Do $t = $t + $lf + ReadLine($f) Until @error
	$_ = Close($f)
	$ReadFile = Split(SubStr($t, 2), $lf)
EndFunction

Function WMIQuery($what,$from,optional $computer,optional $where, optional $x)
	Dim $strQuery, $objEnumerator, $value
	If Not $computer	$computer="@WKSTA"	EndIf
	$strQuery = "Select $what From $from"
	If $where And $x	$strQuery = $strQuery + " Where $where = '$x'"		EndIf
	$SystemSet = GetObject("winmgmts:{impersonationLevel=impersonate}!//$computer")
	$objEnumerator = $SystemSet.ExecQuery($strQuery)
	For Each $objInstance in $objEnumerator
		If @Error = 0 And $objInstance <> ""
			$=Execute("$$value = $$objInstance.$what")
			$WMIQuery="$value"+"|"+"$WMIQuery"
			EndIf
		Next
	$WMIQuery=Left($WMIQuery,Len($WMIQuery)-1)
	Exit @error
	EndFunction

Function GroupMembers($target, optional $full)
	Dim $group, $member, $name, $temp

	$group = GetObject('WinNT://' + $target)
	If @error 	Exit 1		EndIf
	For Each $member in $group.members
		Select
			Case $member.class = "user"
				$temp = $temp +Chr(13)+ $member.name
			Case $member.class = "group"
				If $full
					For Each $name in $member.members
						$temp = $temp +Chr(13)+ $name.name
					Next
				Else
					$temp = $temp +Chr(13)+ $member.name
				EndIf
		EndSelect
	Next
	$GroupMembers = Split(SubStr($temp,2),Chr(13))
EndFunction

Function FilterArray($arr_Source, $arr_Filter)
	For $item = 0 to UBound($arr_Source)
		If Not AScan($arr_Filter,$arr_Source[$item]) = -1  Or Left($arr_Source[$item],5) = 'S-1-5'
			$arr_Source[$item] = ''
		Else
			$arr_Source[$item] = $arr_Source[$item]+ '||'
		EndIf
	Next
	$filterArray = Split(Join($arr_source,''),'||')
EndFunction

;Function looks for a specific running process and returns the PID of it
Function FindPROC($COMPUTER,$PROC,optional $terminate)
	Dim $GetObject, $Select
	$GetObject="winmgmts:{impersonationLevel=impersonate}!//$COMPUTER"
	$select="select * from Win32_Process where Name='$PROC'"
	For Each $Process in GetObject("$GetObject").ExecQuery("$select")
		If $terminate		$Process.Terminate	EndIf
		$FindPROC=$Process.ProcessId
		Next
	EndFunction


_________________________
How to ask questions the smart way <-----------> Before you ask