Mes activités m'amènent à m'insérer plusieurs fois par jour dans des WLAN différents, dans lesquels les serveurs de ressources partagées n'ont, bien sûr, ni la même IP ni le même nom ni même n'empruntent une arborescence similaire, certains serveurs utilisant de plus des O.S. différents (Windows XXX ou Linux, sensible à la casse MAJ/min)...
Le batch utilise un fichier de configuration au format CSV, simple à renseigner (et plus simple à exploiter dans un script que XML !) et présente la structure suivante :
Champ 1 : SSID du réseau concerné par cette ligne ; NOTE : cette valeur ne doit pas être vide.
Champ 2 : Message de bienvenue (au bureau, à la maison, chez ClientX, chez ClientY, chez ClientZ, ...) ; NOTE : cette valeur ne doit pas être vide.
Champ 3 : Nom du PC concerné par cette ligne ou %COMPUTERNAME% si tous les PC connectés à ce WLAN sont autorisés à se connecter à la ressource ; NOTE : cette valeur ne doit pas être vide.
Champ 4 : Nom ou adresse IP de la machine-cible (sera utilisé pour vérifier son état et éviter de perdre du temps à tenter de connecter un lecteur réseau résidant sur PC éteint !) ; NOTE : Cette valeur peut être laissée vide.
Champ 5 : Lettre de lecteur (suivie du deux-points) à attribuer à la connexion ; NOTE : Cette valeur peut être laissée vide.
Champ 6 : Chemin du répertoire à connecter,sous la forme \\<AdrIP ou NomPC>\NomPartage ; NOTE : Cette valeur peut être laissée vide.
Champ 7 : Mot de Passe (s'il est nécessaire pour la connexion) en respectant la casse ; NOTE : Cette valeur peut être laissée vide.
Champ 8 : ID Utilisateur (s'il est nécessaire pour la connexion) en respectant la casse ; NOTE : Cette valeur peut être laissée vide.
Champ 9 : Commentaire éventuel (non exploité par le batch) ; NOTE : Cette valeur peut être laissée vide.
IMPORTANT : Sur une ligne, si un champ est laissé vide, TOUS les champs suivants (à l'exception du champ 9) doivent l'être aussi, mais il est souhaitable de ne pas supprimer les point-virgule qui servent de séparateurs de champ, afin de garder de la lisibilité au fichier quand il est affiché dans un tableur.
Malgré (ou grâce à) son côté "vintage", ce script fonctionne efficacement (et surtout rapidement) au cours de mes déplacements quotidiens.
N'hésitez pas à me contacter si vous le trouvez utile ou si vous rencontrez une difficulté à l'adapter.
Texte du Batch :
==============
Code : Tout sélectionner
@REM L'architecture choisie, constituée d'une boucle principale et de sous-programmmes
@REM a été retenue pour éviter les effets de bord propres a DOS/CMD.
@REM Ceux qui se sont confrontés aux joies (?) du "Setlocal EnableDelayedExpansion"
@REM pour pallier et s'affranchir de la façon dont DOS/CMD affecte les variables dans
@REM une boucle <FOR..DO> ou un <IF .. THEN .. ELSE> me comprendront avec compassion
@REM et pardonneront quelques affronts a l'élégance comme la duplication des variables
@REM ou l'omission des accents dans les messages affichés ...
@SETLOCAL
@ECHO +==================================================================+
@ECHO : Creation des lecteurs distants en fonction du reseau WiFi actuel :
@ECHO : et du PC a partir duquel on est connecte a ce reseau. :
@ECHO +==================================================================+
@ECHO.
@REM On n'affiche pas les messages des commandes qui suivent
@ECHO OFF
@REM On commence par supprimer les connexions existantes (permanentes)
@NET USE * /delete /Y >NUL
@REM On n'affichera le message de bienvenue qu'une fois, même si plusieurs lecteurs réseau doivent être connectés
@SET WELCOME=FALSE
@REM On recupère la ligne contenant le nom du reseau actuel et on la stocke dans un fichier (SSID.txt)
@NETSH WLAN SHOW INTERFACE | findstr /r "^....SSID">SSID.txt
@REM On lit le fichier dans une variable (RESEAU)
@SET /P RESEAU=<SSID.txt
@REM On supprime le fichier temporaire créé (c'est plus propre !)
@DEL SSID.txt
@REM On extrait le seul nom du reseau
@SET RESEAU=%RESEAU:~29%
@REM Boucle principale de lecture (ligne par ligne, en extrayant chaque champ) du fichier NetMap.CSV
@REM A chaque ligne lue, on appelle la routine ParseLig
@REM NOTE : On saute (skip) la 1ère ligne du fichier qui contient les en-tête de colonne et explicite le contenu des champs
@FOR /F "skip=1 tokens=1,2,3,4,5,6,7,8 delims=;" %%a in ('type .\NetMap.CSV') DO (CALL :Parselig "%%a" "%%b" "%%c" "%%d" "%%e" "%%f" "%%g" "%%h")
@ECHO.
@ECHO +--------------------------+
@ECHO : Configuration terminee :
@ECHO : (appuyez sur une touche) :
@ECHO +--------------------------+
@PAUSE>NUL
@REM On termine le batch en évitant d'exécuter une fois de trop le code qui suit (sous-programmes)
@GOTO :eof
@REM Routine ParseLig utilisée comme sous-programme appelé dans la boucle principale
:ParseLig
@IF %~1 == %RESEAU% (
@IF %~3 EQU %COMPUTERNAME% (
@REM ECHO %~1-%~2-%~3-%~4-%~5-%~6-%~7-%~8
@SET UN=%~1
@SET DEUX=%~2
@SET TROIS=%~3
@SET QUATRE=%~4
@SET CINQ=%~5
@SET SIX=%~6
@SET SEPT=%~7
@SET HUIT=%~8
IF %WELCOME% EQU FALSE (
@ECHO.
@ECHO %~3, Bienvenue %~2 sur le reseau %~1 ...
@ECHO.
@SET WELCOME=TRUE
)
@CALL :PCActif
)
)
@GOTO :eof
@REM Routine PCActif utilisée comme sous-programme appelé par la routine ParseLig
:PCActif
@REM Test par Ping si le serveur-cible est actif
@REM ECHO %UN%-%DEUX%-%TROIS%-%QUATRE%-%CINQ%-%SIX%-%SEPT%-%HUIT%
@SET File=%QUATRE%.TXT
@PING %QUATRE% -w 1000 -n 1 | FINDSTR "TTL=">%File%
@FOR /F "usebackq" %%A IN ('%File%') DO set size=%%~zA
@DEL %File%
@IF %size% GTR 0 (
@NET USE %CINQ% %SIX% %HUIT% %SEPT%>NUL
@ECHO %CINQ% ==^> %SIX%
@ECHO.
)
@GOTO :eof
Fin du texte du batch
Fichier NetMap.CSV d'exemple :
=========================
Code : Tout sélectionner
SSID DU RESEAU;BIENVENUE;<Nom_de_mon_PC> ou %COMPUTERNAME% pour tous;<SERVEUR-CIBLE (Nom ou IP)> ou <Vide>;<LETTRE DE LECTEUR>: ou <Vide>;<CHEMIN A CONNECTER> ou <Vide>;<MOT DE PASSE> ou <Vide>;<UTILISATEUR> ou <Vide>;COMMENTAIRE
WFWEEKEND;A LA MAISON;%COMPUTERNAME%;;;;;
WFZEUS;AU SIEGE;%COMPUTERNAME%;SRV-ROI;Y:;\\SRV-ROI\Public;P@ssw0rd;/user:SRV-ROI\Administrateur;
WFDOMTRAV;EN EXIL;%COMPUTERNAME%;PCLINUX;X:;\\PCLINUX\drive_c;PW;/user:PCLINUX\Moi;
WFDOMTRAV;EN EXIL;%COMPUTERNAME%;LIVEBOX;L:;\\Livebox\USB1;;;Disque rattaché au port USB de la box
WFTRAV;AU BUREAU;%COMPUTERNAME%;Ubu-Serv;Z:;\\Ubu-Serv\Public;PW2;/user:Ubu-Serv\MoiAussi;Tous les PC du bureau ont accès au répertoire public sur le serveur
WFTRAV;AU BUREAU;MONPC;Ubu-Serv;R:;\\Ubu-Serv\Restreint;PW2;/user:Ubu-Serv\MoiAussi;Mon adjointe et moi avons seuls l'accès au répertoire Restreint
WFTRAV;AU BUREAU;EXPLOIT;Ubu-Serv;R:;\\Ubu-Serv\Restreint;PW2;/user:Ubu-Serv\MoiAussi;C'est le PC de mon adjointe
WFTRAV;AU BUREAU;SECRETARIAT;SERV-COMPTA;F:;\\SERV-COMPTA\ExportCompta;PWD3;/user:SERV-COMPTA\SECRETAIRE
Fin du fichier d'exemple