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__________________________YAR41BW0\345935334552454C202020202020202020202020 Signature: 169678702 Partitions: 3 Size: 122,935,034,880 bytes Capabilities: Random Access Supports Writing Total drive space: 122,935,034,880 bytes