-----------------------------------------------------------
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]