Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

(Win32) Hard Drive Information

by Mr. Muskrat (Abbot)
on Mar 27, 2004 at 04:10 UTC ( #340212=snippet: print w/ replies, xml ) Need Help??

Description:

Gather all sorts of information about your hard drives. If you are running Windows XP or Server 2003, that information will include the hard drives serial number if it has one.

This was based heavily on WDiskDrives.pl that was the example used in Dave Roth's article on Using WMI to Request Data About Disk Drives.

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
Comment on (Win32) Hard Drive Information
Download Code

Back to Snippets Section

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: snippet [id://340212]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (5)
As of 2014-09-16 04:40 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite cookbook is:










    Results (156 votes), past polls