-----------------------------------------------------------

New Message on BDOTNET

-----------------------------------------------------------
From: spark
Message 3 in Discussion

Here is the code for wmi.pl : 

use Win32;
use Win32::OLE qw (in);

$system = ".";
$classname = "Win32_Process";
@props = ("name");
%prop_value=();
$namespace = "root/cimv2";
$call = "instances";

sub list_instances {
        $serv = Win32::OLE->GetObject("winmgmts://$system/$namespace");
        $objs = $serv->InstancesOf("$classname");
        $i = 1;
        foreach $obj (in($objs)) {
                $str = "$i ";
                if ($all_props) {
                        foreach $prop (in($obj->{Properties_})) {
                                $str = "$str\n $prop->{name} = $obj->{$prop->{name}}";
                        }
                        $str = "$str\n"
                }
                else{
                        foreach $prop (in(@props)) {
                                $str = "$str\t$obj->{$prop}";
                        }
                }
                $str = "$str\n";
                print $str;
                $i = $i + 1;
        }
}

sub list_classinfo {
        $obj = Win32::OLE->GetObject("winmgmts://$system/$namespace:$classname");
        print "$classname Properties : -----------------------------\n";
        $i = 1;
        foreach $prop (in($obj->{Properties_})) {
                print "$i\t$prop->{name}\n";
                $i = $i + 1;
        }
        print "$classname Methods : -----------------------------\n";
        $i = 1;
        foreach $m (in($obj->{Methods_})) {
                print "$i\t$m->{name}\n";
                $i = $i + 1;
        }
}

sub list_namespaceinfo {
        $serv = Win32::OLE->GetObject("winmgmts://$system/$namespace");
        print "$namespace Classes : -----------------------------\n";
        $i = 1;
        foreach $class (in($serv->SubClassesOf())) {
                $path = $class->{Path_}->{Path};
                print "$i\t$path\n";
                $i = $i + 1;
        }
        print "$classname Namespaces : -----------------------------\n";
        $i = 1;
        foreach $ns (in($serv->InstancesOf("__NAMESPACE"))) {
                print "$i\t$ns->{name}\n";
                $i = $i + 1;
        }
}


sub call_method {
        $serv = Win32::OLE->GetObject("winmgmts://$system/$namespace");
        
        if ((scalar keys (%prop_value)) == 0){
                $query="select * from $classname";
        } else{
                $query="select * from $classname where ";
                $and = "";
                for $key (keys %prop_value) {
                        $value = %prop_value->{$key};
                        $query = "$query $and $key=\'$value\'";
                        $and = "and";
                }
        }
        
        print "Query = $query\n";
        $objs = $serv->ExecQuery($query);
        $i = 0;
        foreach $obj (in ($objs)) {
                print "$i $obj->{name}->$methodname\n";
                $obj->{$methodname};
                $i = $i + 1
        }
}



foreach $arg (in(@ARGV)) {
        if ($arg =~ m#/sys:(.*)#) {
                $system = $1;
        } elsif ($arg =~ m#@(.*)#) {
                $system = $1;
        } elsif ($arg =~ m#\/class\:(.*)#) {
                $classname = $1;
        } elsif ($arg =~ m#\-\*#) {
                $all_props = 1;
        } elsif ($arg =~ m#\-(.*)=(.*)#) {
                %prop_value->{$1}=$2;
        } elsif ($arg =~ m#\-(.*)#) {
                @props[$#props+1]=$1;
        } elsif ($arg =~ m#\?#) {
                $call = "classinfo";
        } elsif ($arg =~ m#dir#) {
                $call = "dir";
        } elsif ($arg =~ m#(.*)\(.*\)#) {
                $methodname = $1;
                $call = "method";
        } elsif ($arg =~ m#\/ns\:(.*)#) {
                $namespace = $1;
        } else {
                $classname = $arg;
        }
}

if ($call eq "instances") {
        list_instances();
} elsif ($call eq "dir") {
        list_namespaceinfo();
} elsif ($call eq "classinfo") {
        list_classinfo();
} elsif ($call eq "method") {
        call_method();
}


-----------------------------------------------------------

To stop getting this e-mail, or change how often it arrives, go to your E-mail 
Settings.
http://groups.msn.com/bdotnet/_emailsettings.msnw

Need help? If you've forgotten your password, please go to Passport Member Services.
http://groups.msn.com/_passportredir.msnw?ppmprop=help

For other questions or feedback, go to our Contact Us page.
http://groups.msn.com/contact

If you do not want to receive future e-mail from this MSN group, or if you received 
this message by mistake, please click the "Remove" link below. On the pre-addressed 
e-mail message that opens, simply click "Send". Your e-mail address will be deleted 
from this group's mailing list.
mailto:[EMAIL PROTECTED]

Reply via email to