• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Netzlaufwerk verbinden mit Perl Script

byron1778

Hacker
Hallo,

folgendes muss ich für die Arbeit mittels eines Perl Scripts erledigen.



Auf bereits vorhandenen Netzlaufwerkverbindungen auf Windows Maschinen sollen der Inhalt bestimmter Dateien eingelesen werden und dann in ein anderes File geschrieben werden.

Mein Problem besteht nur darin, dass ich nicht den gewünschten Befehl weiss um bereits vorhandene Netzlaufwerkverbindungen zu nützen.

Angenommen wir haben: f: \\testserver\test.txt, g:\\testserver2\test.txt

Nun möchte ich die bereits vorhandenen Verbindungen nutzen und nur mehr die Datei einlesen.

Leider habe ich nur folgenden Befehl gefunden:

#!/usr/bin/perl -w
use Win32::LanMan;

if(!Win32::Lanman::WNetUseConnection({localname => "z:", remotename => "\\\\mail\\SYSVOL"}))

{
print "Sorry, something went wrong; error: ";
# get the error code
print Win32::Lanman::GetLastError();
exit 1;
}

Aber hierdurch wird ein neues Netzlaufwerk erschaffen!!

Weiss jemand zufällig ein anderes Modul mit dem es geht bzw. die richtige Funktion?

Wenn jemand mir einen Tipp geben könnte

Danke

Mfg
Byron
 

nobbiew

Hacker
Code:
sub mount_lw($$){
   my ($lw, $unc) = @_;
   unless  ( -d "%{lw}\\" ) {
      unless (Win32::Lanman::WNetUseConnection({localname => "$lw", remotename => "$unc"})) {
      # get the error code
      warn "Sorry, something went wrong; error:" , Win32::Lanman::GetLastError();
      return 0;
   } 
   return 1:
}
exit 1 unless mount_lw("k:", "\\\\mail\\SYSVOL");
Sollte das machen, was du willst. Ich kann´s nur leider nicht testen, da ich derzeit keinen Windowsrechner zur Verfügung habe (ist ja hier auch ein LINUX-Forum)

Du siehts, du musst im Grunde nur prüfen, ob das Verzeichnis k:\ vorhanden ist. Ich hab den exit aus der Funktion verbannt, denn man sollte nie innerhalb von Funktionen aus einem Programm austeigen.

Achtung:
Dem Skript ist es egal ob auf K: auch der Richtige UNC-Pfad verbunden ist. wenn da was anderes verbunden ist, wirst du dein blaues Wunder erleben.
 

regexer

Advanced Hacker
Vielleicht verstehe ich dein Problem nicht ganz, aber wenn die Netzlaufwerk-Verbindungen bereits bestehen, dann greife doch einfach auf die Files zu. Ich weiß nicht, ob du unter perl für Windows als Verzeichnistrenner Backlash mit entwertung oder einen einfachen Backslash nehmen musst. Aber ansonsten dürfte doch folgendes Schema funktionieren:

Code:
open (FILE1, "<f: \\testserver\\test.txt") || die "$!\n";
while (<FILE1>) {
print;   # oder sonst irgendwas
}
close FILE1;
 
Oben