foreach my $targetServer (@targets) { # Ping host to check its available my $p = Net::Ping->new(); if ($p->ping($targetServer)) { $logger->info("Target [$targetServer] is alive, starting deployment "); foreach my $deploySection (@deployments) { if ($flagDeploy) { $logger->info("Starting deployment for [$deploySection] on target [$targetServer] "); my $deploySource = "$config{$deploySection}{'Source'}" ; my $deployDest = "$config{$deploySection}{'Destination'}" ; if ($flagNoMove) { my $thread = threads->new(sub {deployRoutine($targetServer, $deploySource, $deployDest, "true")}); push (@Threads, $thread); } else { my $thread = threads->new(sub {deployRoutine($targetServer, $deploySource, $deployDest)}); push (@Threads, $thread); } } } } else { $logger->warn("Couldn't ping target [$targetServer] host will be ignored "); } $p->close(); } #### # Main subroutine, here's where we will deploy content sub deployRoutine($$$;$) { my ($remoteHost, $sourceDir, $destDir, $flagNoMove) = @_ ; $flagNoMove="" unless ($flagNoMove); my $cmd = "psexec \\\\$remoteHost /accepteula -u $user -p $pass -h -e -n 3 -f -c $copyScript $sourceDir \"$destDir\" $flagNoMove" ; my $returnCode = `$cmd`; return $returnCode ; } #### Process can't access file because it is used by another process Connecting to MYSERVER...Starting PsExec service on MYSERVER...Connecting with PsExec service on MYSERVER...Copying C:\temp\deploy_files.cmd to MYSERVER...Error copying C:\temp\deploy_files.cmd to remote system: Free to wrong pool 348d3a0 not 298de8 during global destruction.