use strict;
use Win32::OLE qw( in );
my @CAPABILITIES = (
'Unknown', 'Other', 'Sequential Access', 'Random Access', 'Supports
+Writing',
'Encryption', 'Compression', 'Supports Removable Media',
'Manual Cleaning', 'Automatic Cleaning'
);
my $TotalSize = 0;
my $Machine = shift @ARGV || ".";
$Machine =~ s/^[\\\/]+//;
my $WMIServices = Win32::OLE->GetObject( "winmgmts:{impersonationLevel
+=impersonate,(security)}//$Machine" ) || die;
my (@drives, %serial);
my $DriveCollection = $WMIServices->InstancesOf( "Win32_DiskDrive" );
foreach my $Drive ( in( $DriveCollection ) ) {
push @drives, $Drive;
}
my $PhysMedia = $WMIServices->InstancesOf( "Win32_PhysicalMedia" );
foreach my $Drive ( in( $PhysMedia ) ) {
my $name = (split(/=/, $Drive->{Path_}->relpath))[1];
$serial{eval $name} = $Drive->{SerialNumber};
}
foreach my $Drive (@drives) {
print "Name: $Drive->{Name}\n";
print " Manufacturer: $Drive->{Manufacturer}\n";
print " Media Type: $Drive->{MediaType}\n";
print " Description: $Drive->{Description}\n";
print " Drive type: $Drive->{InterfaceType}\n";
print " Model: ", $Drive->{Model} || "Unknown", "\n";
print " Caption: $Drive->{Caption}\n";
print " SerialNumber: $serial{$Drive->{Name}}\n";
print " PNPDeviceID: $Drive->{PNPDeviceID}\n";
print " Signature: $Drive->{Signature}\n";
print " Partitions: $Drive->{Partitions}\n";
print " Size: ", FormatNumber( $Drive->{Size} ), " bytes\n";
print " Capabilities:\n";
my $CapabilityList = $Drive->{Capabilities} || [];
foreach my $Cap ( @{$CapabilityList } ) {
print " $CAPABILITIES[$Cap]\n";
}
print "\n";
$TotalSize += $Drive->{Size};
}
print "Total drive space: ", FormatNumber( $TotalSize ), " bytes\n";
sub FormatNumber {
my($Number) = @_;
while( $Number =~ s/^(-?\d+)(\d{3})/$1,$2/ ){};
return( $Number );
}
__DATA__
F:\>wdd2.pl
Name: \\.\PHYSICALDRIVE0
Manufacturer: (Standard disk drives)
Media Type: Fixed hard disk media
Description: Disk drive
Drive type: IDE
Model: Maxtor 6Y120P0
Caption: Maxtor 6Y120P0
SerialNumber: Y435RELE
PNPDeviceID: IDE\DISKMAXTOR_6Y120P0__________________________YAR41BW
+0\345935334552454C202020202020202020202020
Signature: 169678702
Partitions: 3
Size: 122,935,034,880 bytes
Capabilities:
Random Access
Supports Writing
Total drive space: 122,935,034,880 bytes
|