dialog -l wmie {
title "WMI Exploration - /wmie"
size -1 -1 545 340
option dbu
text "Looking up namespaces...", 10, 2 1 130 8
list 11, 2 10 160 320, sort size
text "Select a namespace", 20, 163 1 130 8
list 21, 163 10 160 320, sort size
text "Select a class", 30, 324 1 200 8
list 31, 324 10 220 320, size
check "Hide properties with $!null value", 32, 436 330 87 10
edit "", 12, 2 330 160 10
edit "", 22, 163 330 160 10
edit "", 33, 324 330 109 10
list 13, 1 340 10 10, hide size
list 23, 163 340 10 10, hide size
list 34, 324 340 10 10, hide size
}
alias wmie dialog $iif($dialog(wmie),-c,-m) wmie wmie
on *:dialog:wmie:*:*: {
if ($devent == init) {
.timerwmie.load -iom 1 1 wmie.namespaces
}
elseif ($devent == sclick) {
if ($did == 11) && ($did(11).seltext) {
var %x = 1,%v Set objClass = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\ $+ $did(11).seltext $+ ") $lf For Each objClassProperty In objClass.SubclassesOf() $lf result = result & objClassProperty.Path_.Class & $qt($chr(1)) $lf Next $lf
if ($com(wmie.vb)) .comclose wmie.vb
.comopen wmie.vb MSScriptControl.ScriptControl
.comclose wmie.vb $com(wmie.vb,Language,4,bstr,VBScript) $com(wmie.vb,ExecuteStatement,1,bstr,%v) $com(wmie.vb,eval,3,bstr*,result) $com(wmie.vb,&x).result
var %s = $did(21).seltext
did -rh wmie 21,23
while ($bfind(&x,%x,$chr(1))) {
var %d = $bvar(&x,%x,$calc($v1 -%x)).text,%x $v1 + 1
did -a wmie 23 %d
}
filter -ioc wmie 23 wmie 21 $+(*,$did(wmie,22),*)
did -ra wmie 20 Classes ( $+ $bytes($did(21).lines,b) out of $bytes($did(23).lines,b) $+ ):
did -v wmie 21
if ($didwm(21,%s)) did -c wmie 21 $v1
else {
did -r wmie 31
did -ra wmie 30 Select a class
}
}
elseif ($did == 21) {
var %v = Set objClass = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\ $+ $did(11).seltext $+ : $+ $did(21).seltext $+ ") $lf For Each objClassProperty In objClass.Properties_ $lf result = result & objClassProperty.Name & " " $lf Next
if ($com(wmie.vb)) .comclose wmie.vb
.comopen wmie.vb MSScriptControl.ScriptControl
noop $com(wmie.vb,Language,4,bstr,VBScript) $com(wmie.vb,ExecuteStatement,1,bstr,%v) $com(wmie.vb,eval,3,bstr*,result)
var %p = $com(wmie.vb).result
.comclose wmie.vb
if ($com(wmie.open)) .comclose wmie.open
if ($com(wmie.locator)) .comclose wmie.locator
if ($com(wmie.properties)) .comclose wmie.properties
.comopen wmie.open WbemScripting.SWbemLocator
.comclose wmie.open $com(wmie.open,ConnectServer,3,bstr,.,bstr,$did(11).seltext,dispatch* wmie.locator)
noop $com(wmie.locator,InstancesOf,3,bstr,$did(21).seltext,dispatch* wmie.properties)
noop $com(wmie.properties,Count,3)
.comclose wmie.locator
var %t = $iif($com(wmie.properties).result isnum,$v1,0),%x 1
did -ra wmie 30 Properties $bytes($numtok(%p,32),b) properties in $bytes(%t,b) instance(s):
did -rh wmie 31,34
while (%x <= %t) && (%x <= 500) {
did -a wmie 34 Instance $+($chr(35),%x,:)
tokenize 32 %p
while ($1) {
did -a wmie 34 $1 = $comval(wmie.properties,%x,$1)
tokenize 32 $2-
}
did -a wmie 34 $chr(160)
inc %x
}
.comclose wmie.properties
if ($did(32).state) filter -iocx wmie 34 wmie 31 * =
else filter -ioc wmie 34 wmie 31 $+(*,$did(33),*)
did -v wmie 31
}
elseif ($did == 32) {
var %s = $did(31).seltext
did -h wmie 31
if ($did(32).state) filter -iocx wmie 31 wmie 31 * =
else filter -ioc wmie 34 wmie 31 $+(*,$did(33),*)
if ($didwm(31,%s)) did -c wmie 31 $v1
did -v wmie 31
}
}
elseif ($devent == dclick) && ($did($did).seltext) clipboard $v1
elseif ($devent == edit) {
if ($did == 12) {
var %s = $did(11).seltext
did -rh wmie 11
filter -ioc wmie 13 wmie 11 $+(*,$did(12),*)
did -ra wmie 10 Namespaces ( $+ $did(11).lines out of $did(13).lines $+ ):
if ($didwm(11,%s)) did -c wmie 11 $v1
else {
did -r wmie 21,31
did -ra wmie 20 Select a namespace
did -ra wmie 30 Select a class
}
did -v wmie 11
}
elseif ($did == 22) {
var %s = $did(21).seltext
did -rh wmie 21
filter -ioc wmie 23 wmie 21 $+(*,$did(22),*)
did -ra wmie 20 Classes ( $+ $bytes($did(21).lines,b) out of $bytes($did(23).lines,b) $+ ):
if ($didwm(21,%s)) did -c wmie 21 $v1
else {
did -r wmie 31
did -ra wmie 30 Select a class
}
did -v wmie 21
}
elseif ($did == 33) {
var %s = $did(31).seltext
did -rh wmie 31
filter -ioc wmie 34 wmie 31 $+(*,$did(33),*)
if ($did(32).state) filter -iocx wmie 31 wmie 31 * =
if ($didwm(31,%s)) did -c wmie 31 $v1
did -v wmie 31
}
}
elseif ($devent == close) {
if ($com(wmie.vb)) .comclose wmie.vb
if ($com(wmie.open)) .comclose wmie.open
if ($com(wmie.locator)) .comclose wmie.locator
if ($com(wmie.properties)) .comclose wmie.properties
.timerwmie.* off
}
}
alias -l wmie.namespaces {
var %v = dim result $lf Call EnumNameSpaces("root") $lf Sub EnumNameSpaces(strNameSpace) $lf On Error Resume Next $lf result = result & " " & strNameSpace $lf Set objWMIService=GetObject("winmgmts:{impersonationLevel=impersonate}\\.\" & strNameSpace) $lf Set colNameSpaces = objWMIService.InstancesOf("__NAMESPACE") $lf For Each objNameSpace In colNameSpaces $lf Call EnumNameSpaces(strNameSpace & "\" & objNameSpace.Name) $lf Next $lf End Sub $lf
if ($com(wmie.vb)) .comclose wmie.vb
.comopen wmie.vb MSScriptControl.ScriptControl
noop $com(wmie.vb,Language,4,bstr,VBScript) $com(wmie.vb,ExecuteStatement,3,bstr,%v) $com(wmie.vb,eval,3,bstr*,result)
tokenize 32 $com(wmie.vb).result
.comclose wmie.vb
did -rh wmie 11,13
did -a wmie 13 $*
filter -ioc wmie 13 wmie 11 $+(*,$did(wmie,12),*)
did -ra wmie 10 Namespaces ( $+ $did(wmie,11).lines out of $did(wmie,13).lines $+ ):
did -v wmie 11
}