Yes, although using VB opens some doors, and now that I've been playing around with it for a while, it's actually quite nice.

For run, I made this little WMI exploration thing (which is basically just a crappier version of WMI Code Creator without the code creator part):
Code:
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
}

The startup takes a while, unless you're running mIRC in admin mode.