Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations derfloh on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Using Win32::OLE - step by step info please.. i'm new to this

Status
Not open for further replies.

akelabanda

Programmer
Joined
Dec 19, 2001
Messages
61
Location
IN
Hi

I have a task to identify information on devices like
hard disks, NICs, memory, etc on Windows NT and
Windows 2000 using perl. All I know is - I have to use
the Win32 / OLE module which has support for WMI.

Please tell me how can I use this ? What are the steps
involved ? Any small working example should really help.

Thanks a lot in advance.

Raj
 
If you don't have it yet, get Dave Roth's "Win32 Perl Scripting: Administrators Handbook".
Here's just one sample from the book:

# WMIDisks.pl
# ----------------------------------------
# From "Win32 Perl Scripting: Administrators Handbook" by Dave Roth
# Published by New Riders Publishing.
# ISBN # 1-57870-215-1
#
# This script displays information about disks on a remote machine.
#
print "From the book 'Win32 Perl Scripting: The Administrator's Handbook' by Dave Roth\n\n";


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

%TYPE = (
0 => 'Unknown',
1 => 'No root',
2 => 'Removable',
3 => 'Local',
4 => 'Network',
5 => 'CDRom',
6 => 'RAM Disk'
);

push( @ARGV, Win32::NodeName() ) if( ! scalar @ARGV );
foreach my $Machine ( @ARGV )
{
# Remove any backslashes
$Machine =~ s/\\+//;
my $CLASS = "WinMgmts:{impersonationLevel=impersonate}!//$Machine";
print "\\\\$Machine\n";
if( my $WMI = Win32::OLE->GetObject( $CLASS ) )
{
local $Disk;

$~ = DISK_HEADER_FORMAT;
write;
$~ = DISK_FORMAT;
foreach $Disk ( in( $WMI->InstancesOf( "Win32_LogicalDisk" ) ) )
{
local $Drive = $TYPE{$Disk->{DriveType}};
local %Size = (
total => FormatNumber( $Disk->{Size} ),
free => FormatNumber( $Disk->{FreeSpace} )
);
write;
}
}
print "\n";
}

sub FormatNumber
{
my( $Number ) =@_;
while( $Number =~ s/^(-?\d+)(\d{3})/$1,$2/ ){};
return( $Number );
}

format DISK_HEADER_FORMAT =
FS Type Size Free
--- ----- --------- --------------------- ---------------------
.
format DISK_FORMAT =
@<< @<<<< @<<<<<<<< @>>>>>>>>>>>>>>>>>>>> @>>>>>>>>>>>>>>>>>>>>
$Disk->{Name}, $Disk->{FileSystem}, $Drive, $Size{total}, $Size{free}
.
 
Hi

This prints out just
From the book 'Win32 Perl Scripting: The Administrator's Handbook' by Dave Roth

\\RAJEEVA

which is my machine name.

What are the prerequisites to run this script. I feel
I have the Win32::OLE module installed.

Thanks
Rajeev
 
If Win32:OLE is indeed installed properly, then the script is not able to communicate with WMI or WMI is reporting that no disks are available. Ensure that WMI is also running on the machine.
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top