# Recreate the JS in actual Perl with Win32-based modules, because there's no reason to spawn a javascript interpreter to run a ScriptingObject library to do the underlying win32 api calls that they wrap use warnings; use strict; use Win32API::File (); # comes pre-installed with Strawberry Perl use Win32::DriveInfo (); # installed using `cpanm Win32::DriveInfo` sub GetDriveInfoPL { my $drives = defined $_[0] ? $_[0] : join('', 'A'..'Z'); local $\ = "\n"; my $retval = "\nPerl Gets:\n"; for ( split //, $drives ) { my $drive = $_ . ':'; # GetDriveType is one of many ways to determine whether it's an active drive or not, with the benefit that it can distinguish between types of drives my $type = Win32API::File::GetDriveType($drive); next unless $type > Win32API::File::DRIVE_NO_ROOT_DIR; my $typestr = (qw/DRIVE_UNKNOWN DRIVE_NO_ROOT_DIR DRIVE_REMOVABLE DRIVE_FIXED DRIVE_REMOTE DRIVE_CDROM DRIVE_RAMDISK/)[$type]; #print "GetDriveType($drive) = $type => $typestr"; my $fsotype = $type - 1; # the FSO .DriveType is off-by-one from the Win32API::File::GetDriveType() call: # GetVolumeInformation grabs most of the attributes available from the FSO Drive object properties warn "GetVolumeInformation($drive) failed: $^E\n" unless Win32API::File::GetVolumeInformation("${drive}/", my $osVolName, 99, my $ouSerialNum, my $ouMaxNameLen, my $ouFsFlags, my $osFsType, 99 ); my $hexSerialNum = sprintf '%X', $ouSerialNum; #print "GetVolumeInformation(${drive}/) => $osVolName, $ouSerialNum = 0x$hexSerialNum, $ouMaxNameLen, $ouFsFlgs, $osFsType"; #... except size info, which can be gotten through Win32::DriveInfo my @space = Win32::DriveInfo::DriveSpace($drive); #print "DriveSpace($drive) = ", join ', ', @space; $retval .= "$drive*$fsotype*$hexSerialNum*$osFsType*$osVolName*$space[5]*$space[6]\n"; } print $retval; } # GetDriveInfoJS(); # this is the GetDriveInfo sub from [harangsolt33]'s answer (so not repeated here) GetDriveInfoPL(); #### JS Gets: C:*2*BE093728*NTFS*OS*1001296752640*719091134464 J:*3*BBA13F0F*NTFS*MyNAS*2984210202624*2221555318784 T:*3*448F8317*exFAT*OffBrand Cloud Drive*54760833024*54619620864 Perl Gets: C:*2*BE093728*NTFS*OS*1001296752640*719091134464 J:*3*BBA13F0F*NTFS*MyNAS*2984210202624*2221555318784 T:*3*448F8317*exFAT*OffBrand Cloud Drive*54760833024*54619620864