use Net::SSH2 ; use Win32::Process; my $ShareNameIncludingIPAndLoginCredentials ; # Refer ShareString below = "\\\\DS211-PLUS\\SMB_Testground /USER:admin password" ; my $OPFileNamePrefix = "DS211P_DISTINCT_SHARES" ; my $NumVMsRunning = 12 ; my @HostNames ; my @DBNames ; my @OPFileNames ; my @ShareString ; for (my $Ctr = 1; $Ctr <= $NumVMsRunning ; $Ctr ++) { $ShareString[$Ctr] = sprintf "\\\\DS211-Plus\\SMB_Share_%02d /USER:admin password /y", $Ctr ; $HostNames[$Ctr] = sprintf "AT-VIRTPC-%02d", $Ctr ; $DBNames[$Ctr] = sprintf "Disk-Bench-QD64-%02d.icf", $Ctr ; $OPFileNames[$Ctr] = sprintf "%s-%02d.csv", $OPFileNamePrefix, $Ctr } my @SSHConnections ; my @SSHConnectionChannels ; my ($len,$buf) ; for (my $Ctr = 1; $Ctr <= $NumVMsRunning; $Ctr ++) { $len = 0; $buf = 0; printf "\n\nTrying to connect with SSH2 to %s", $HostNames[$Ctr] ; $SSHConnections[$Ctr] = Net::SSH2->new(); $SSHConnections[$Ctr]->connect ($HostNames[$Ctr]) or die $! ; $SSHConnections[$Ctr]->auth_password ("username", "password") ; $SSHConnectionChannels[$Ctr] = $SSHConnections[$Ctr]->channel(); $SSHConnectionChannels[$Ctr]->blocking(0); $SSHConnectionChannels[$Ctr]->shell(); $ShareNameIncludingIPAndLoginCredentials = $ShareString[$Ctr] ; my $Cmd = "net use Z: $ShareNameIncludingIPAndLoginCredentials \n" ; printf "\nExecuting $Cmd" ; my $CmdSuccess = $SSHConnectionChannels[$Ctr]->write ("$Cmd") ; select(undef,undef,undef,0.2); printf "\n\nMounted Z: on %s : %s", $HostNames[$Ctr], !defined ($CmdSuccess) ? "Failed" : "Succeeded" ; } for (my $NumClients = 1; $NumClients <= $NumVMsRunning; $NumClients ++) { printf "\n\nSTARTING TESTS for Number of Clients : %d", $NumClients ; for (my $DynamoID = 1; $DynamoID <= $NumClients; $DynamoID ++) { $SSHConnectionChannels[$DynamoID]->flush(); my $Cmd = sprintf "C:\\Softwares\\IOMeter\\DYNAMO.exe /i 10.0.0.1 /m %s\n",$HostNames[$DynamoID] ; print "\n\nExecuting : $Cmd\n" ; $SSHConnectionChannels[$DynamoID]->write ($Cmd); } my $ICFName = $DBNames[$NumClients] ; my $OPFName = $OPFileNames[$NumClients] ; my $Cmd = sprintf "C:\\Softwares\\IOMeter\\IOMeter\\iometer /c C:\\Softwares\\IOMeter\\%s /r B:\\%s", $ICFName, $OPFName ; print "\n\nExecuting : $Cmd\n" ; my $IOMeterProcessObject ; Win32::Process::Create ( $IOMeterProcessObject, "C:\\Softwares\\IOMeter\\IOMeter\\iometer.exe", $Cmd, 0, NORMAL_PRIORITY_CLASS, "." ) || die &ErrorReport(); $IOMeterProcessObject->Wait (INFINITE) ; printf "\n\nFINISHED TESTS for Number of Clients : %d", $NumClients ; } for (my $Ctr = 1 ; $Ctr <= $NumVMsRunning ; $Ctr ++) { $SSHConnectionChannels[$Ctr]->close ; }