Function WMIQuery($sWhat, $sFrom, Optional $sComputer, Optional $sWhere, Optional $x, Optional $root, Optional $pAuth)
Dim $, $sQuery, $objEnum, $sValue, $TMP, $SystemSet, $objInstance, $objLocator
$sComputer = Trim(Join(Split($sComputer,'\'),''))
If Not $sComputer Or $sComputer = @WKSTA
$sComputer = '.'
EndIf
If Not $root
$root = '\root\cimv2'
EndIf
$sQuery = 'Select ' + $sWhat + ' From '+ $sFrom
If $sWhere And $x
$sQuery = $sQuery + " Where " + $sWhere + " = '" + $x + "'"
EndIf
If $pAuth
$SystemSet = $pAuth
Else
$SystemSet = GetObject('winmgmts:{impersonationLevel=impersonate}!\\' + $sComputer + $root)
If @ERROR Or Not $SystemSet
Exit Val('&' + Right(DecToHex(@ERROR), 4))
EndIf
EndIf
$objEnum = $SystemSet.ExecQuery($sQuery)
If @ERROR Or Not $objEnum
Exit VAL("&" + Right(DecToHex(@ERROR), 4))
EndIf
For Each $objInstance In $objEnum
$ = Execute(Chr(36) + 'sValue = ' + Chr(36) + 'objInstance.' + $sWhat)
If VarType($sValue) & 8192
$Tmp = $Tmp + '|' + Join($sValue,'|')
Else
$Tmp = $Tmp + '|' + $sValue
EndIf
Next
$WMIQuery = split(substr($Tmp,2),'|')
Exit Val("&" + Right(DecToHex(@ERROR), 4))
EndFunction