2013-10-14 3 views
0

J'ai actuellement une fonction pour copier des fichiers du lecteur réseau et les coller dans mon dossier de serveur local.Perl Opendir avec connexion?

sub getNetworkDrive { 
    #my $dir="\\\\network\\Path"; 
    my ($dir, $move_to) = @_; 

    opendir(DIR, $dir) or die "can't opendir $dir: $! \n"; 

    my @files=readdir(DIR); 
    closedir DIR; 

    foreach my $file (@files) 
    { 
     if (-f "$dir$file") 
     { 
      #my $move_to="C:\\Projects\\Perl\\download\\$file"; 
      my $move_from = "$dir$file"; 
      copy($move_from, $move_to) or die "Copy Failed: $!"; 
      print "File: $file : has been downloaded Successfully\n"; 
     } 
    } 
} 

Cela fonctionne parfaitement bien lorsque j'utilise mon utilisateur pour exécuter le script, car mon utilisateur a accès au lecteur réseau.

Je voudrais que ce script demande un nom d'utilisateur et un mot de passe autorisés chaque fois que le script est exécuté.

Opendir accepte-t-il le nom d'utilisateur et le mot de passe comme paramètre? si ce n'est pas le cas, quelle est mon alternative?

+1

http://stackoverflow.com/questions/8972171/copy-file-to-a-network- share-with-different-nom d'utilisateur-et-mot de passe –

Répondre

0

Merci à mpapec

J'ai ajouté une nouvelle fonction pour cela et il fonctionne maintenant

use Win32::NetResource qw/GetUNCName AddConnection CancelConnection/; 
use Win32API::File qw/ CopyFile fileLastError /; 
sub getNetworkDrive { 
    my ($share_name, $user_name, $password) = @_; 

    my $drive; 
    for my $letter ('g' .. 'z') { 
     my $mapped; 
     $drive = "$letter:"; 
     GetUNCName($mapped, $drive); 
     last if not $mapped; 
    } 

    my $share = { 
     RemoteName => $share_name, 
     LocalName => $drive, 
    }; 

    print "connecting $share->{RemoteName} to $share->{LocalName}\n"; 
    if(not AddConnection($share, $password, $user_name, 0)) { 
     die "connection error:\n", win32err(); 
    } 

    for my $file(@ARGV) { 
     print "copying $file\n"; 
     CopyFile($file, "$share->{LocalName}$file", 0) 
      or print "\tfailed: " . fileLastError() . "\n"; 
    } 

    getNetworkDriveWithoutLogin($share->{LocalName}, "C:\\Projects\\Perl\\download\\"); 

    if(not CancelConnection($share->{LocalName}, 0, 1)) { 
     print "disconnection error:\n", win32err(); 
    } 
}