mercoledì 26 marzo 2008

Connessione di unità di rete automatiche mediante file batch: createSambaBat.pl

Risulta molto comodo poter collegare unità di rete Windows con share Samba. Avendo una lista degli utenti e delle unità da collegare, è possibile utilizzare un semplice script Perl per la realizzazione di file batch che colleghino automaticamente all'avvio l'unità di rete prescelta. Lo script mostrato di seguito, denominato createSambaBat.pl processa un file in formato csv nel quale devono essere inserite le informazioni relative a username, password (in chiaro), server a cui collegarsi, unità di rete sulla quale montare la share e la share a cui collegarsi. Il programma crea un file .bat per ogni utente/server, nella forma username_server.bat, che può contenere anche più share/unità per lo stesso utente (nel qual caso più righe per lo stesso utente devono essere specificate nel file CSV).

#!/usr/bin/perl

# $ARGV[0] = csv file for reading user credentials: it must have the following columns
# username;password;drive;server;share
# $ARGV[1] = directory where the bat files will be stored


# * Copyright (C) Luca Ferrari 2008
# *
# * This program is free software: you can redistribute it and/or modify
# * it under the terms of the GNU General Public License as published by
# * the Free Software Foundation, either version 3 of the License, or
# * (at your option) any later version.
# *
# * This program is distributed in the hope that it will be useful,
# * but WITHOUT ANY WARRANTY; without even the implied warranty of
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# * GNU General Public License for more details.
# *
# * You should have received a copy of the GNU General Public License
# * along with this program. If not, see .

# open the input file
open(INPUT_FILE, "<$ARGV[0]") || die("\nCannot open input file $ARGV[0]\n$!\n"); $written = 0; # read each file from the file READLINE: while( $line = ){
@parts = split(";", $line);

$username = $parts[0];
$password = $parts[1];
$drive = $parts[2];
$server = $parts[3];
$share = $parts[4];

$filename = $ARGV[1] . "/" . $username . "_" . $server . ".bat";

chomp($username);
chomp($password);
chomp($drive);
chomp($server);
chomp($share);

# create a file for the username
if( open(BAT_FILE, ">>$filename") ){

# store the information on the bat file
print BAT_FILE "NET USE $drive \\\\$server\\$share /USER:$username \"$password\"\n";
close(BAT_FILE);
$written++;
}
else{
warn("\nCannot write ouptu file $filename\n$!\n");
next READLINE;
}

} # end of while


print "\nWritten $written files\n";

Se il file di ingresso contiene le seguenti tuple:

luca.ferrari;LucFer;U:;myServer;myShare

e viene invocato come

createSambaBat.pl file.csv .

allora viene generato un file di nome luca.ferrari_mySever.bat che contiene la seguente linea:

NET USE U: \\myServer\myShare /USER:luca.ferrari "LucFer"

che consente a Windows di collegare \\myServer\myShare come unità di rete U:.

A questo punto è sufficiente copiare il file batch nel computer di destinazione, magari direttamente sotto la cartella esecuzione automatica del menù Start per ottenere il collegamento dell'unità di rete all'avvio del computer. E' possibile rendere il file non modificabile, ma non va assolutamente messo come nascosto, altrimenti non verrà nemmeno eseguito.

Nessun commento: