in reply to diskpart.exe and perl

You might also consider just doing it directly in Perl. See the DiskGeom.plx sample script from the Win32API-File distribution for a starting point. See other IOCTL_DISK_* codes as documented in the Microsoft Windows SDK documentation.

Update: I guess he didn't want to do the research and find items like IOCTL_DISK_FIND_NEW_DEVICES.

- tye        

Replies are listed 'Best First'.
Re^2: diskpart.exe and perl (s/and/in/)
by neo1491 (Beadle) on Nov 11, 2007 at 02:40 UTC
    thank you... but that script only sees drives already connected to the operating system... it doesn't rescan the scsi bus as you're creating additional physicaldrives... which is what i'm doing. i finally figured out how to send commands to microsoft diskpart and capture the response so i thought i'd post the final script for future reference. please keep in mind i'm a novice... so try not to laugh too hard at my syntax. i'd be very interested if anyone wants to critique my code and provide feedback.
    #!c:/Perl/bin/perl.exe -w use strict ; use warnings ; use English ; &send_diskpart_command ("rescan"); &send_diskpart_command ("list disk"); sub send_diskpart_command { my $debug = 0; my ($diskpart_command) = @_; if ($diskpart_command eq "") { print "\n***No command passed to the send_diskpart_comman +d subroutine***\n" ; return ; } # diskpart.exe requires a textfile input # deleting the textfile if it already exists then creating a new textf +ile with the diskpart_command my $file = "diskpart_cmd.txt"; if ($debug) { print "\nSearching for an existing copy of the text file +$file."; if (unlink($file) == 1) { print "\nThe file '$file' was found and deleted."; } else { print "\nThe file '$file' was not detected."; } } open (DPART, ">>$file") || die ("Could not open file. $!"); print DPART ($diskpart_command); if ( $debug ) { print "\nCreated file '$file'." ; } close (DPART); if ( $debug ) { print "\n\nSending $diskpart_command." ; } open ( FH , "diskpart /s diskpart_cmd.txt|" ) || die ("Could not + open file. $!"); print "\nCommand '$diskpart_command' sent to the host.\n"; if ( $debug ) { print "\n"; } my @inFile = <FH> ; # read all at once into array foreach (@inFile) { if ( $debug ) { print $_."\t"; } } close (FH); if ($debug) # delete the textfile { if (unlink($file) == 1) { print "\n\nThe file '$file' was deleted successfully.\ +n"; } else { print "\n\nThe file '$file' was not deleted.\n"; } } }