schau dir das mal an
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
use warnings;
use strict;
use Getopt::Long;
use Pod::Usage;
use Win32::OLE;
# Your usual option-processing sludge.
my %opts;
GetOptions (\%opts, 'help|h|?', 'remote=s')
or pod2usage (2);
(exists $opts{'help'})
and pod2usage ('-exitstatus' => 0, '-verbose' => 2);
# Ensure exactly one argument after options.
scalar @ARGV == 1
or pod2usage (2);
my ($class) = @ARGV;
# Bomb out completely if COM engine encounters any trouble.
Win32::OLE->Option ('Warn' => 3);
# Get a handle to the SWbemServices object of the machine.
my $computer = Win32::OLE->GetObject (exists $opts{'remote'}
? "WinMgmts://$opts{'remote'}/"
: 'WinMgmts:');
# Get the SWbemObjectSet of all objects of the class.
my $instances_set = $computer->InstancesOf ($class);
# Convert set to Perl array.
my @instances = Win32::OLE::Enum->All ($instances_set);
# Display all properties of an object.
sub dump_obj ($) {
my ($obj) = @_;
# Get set of properties of the class.
my $props_set = $obj->{'Properties_'};
# Convert set to Perl array.
my @props = Win32::OLE::Enum->All ($props_set);
foreach my $prop (@props) {
my $name = $prop->{'Name'};
printf "%32s ", $name;
my $value;
if ($prop->{'IsArray'}) {
$value = '<array>';
}
else {
$value = $prop->{'Value'};
defined $value
or $value = '<undefined>';
}
print "$value\n";
}
}
foreach my $instance (@instances) {
dump_obj ($instance);
print "\n";
}
exit 0;
=head1 NAME
instances.pl - Dump all instances of a WMI class
=head1 SYNOPSIS
instances.pl [ options ] <WMI class name>
Options:
--help Display help and exit
--remote <host> Operate on <host> instead of local machine
=head1 SEE ALSO
http://msdn.microsoft.com/library/en-us/wmisdk/wmi/wmi_classes.asp
call:
instances.pl Win32_Battery