MISE A JOUR DU SCRIPT
J'ai apporté les modifications que m'a suggéré Sylvanie.
Ajout : Création d'un fichier réponse (à la racine du scripte) où sont stockées la ou les machines à atteindre.
Le scripte fonctionne parfaitement ! mais je pense que ma fonction _server_list() n'est pas très académique !
J'attend vos réactions
------------------------------------------------------------------------------------------------------------------------------
Voici mon premier script sous Autoit (soyer indulgent je débute en programmation )
Marre de taper votre Login/Password pour accéder à vos ressources distantes !
Ce script permet de s'authentifier sur une ou plusieurs machine, c'est à dire on va ouvrir un canal $IPC sur chaque machine.
Idem à la commande DOS : Net use \\MACHINE\IPC$ /user:mon_domaine\mon_utilisateur mon_password
On utilise le même login/password sur chaque machine, ces derniers sont cryptés et enregistrés dans la base de registre.
Vos commentaires et vos remarques sont les bienvenue pour améliorer ou optimiser le code !
Code : Tout sélectionner
#cs ----------------------------------------------------------------------------
AutoIt Version : 3.3.6.1
Auteur: smirold
Fonction du Script : Authentification automatique sur une ou plusieurs machines (ouverture d'un canal $IPC sur chaque machine)
#ce ----------------------------------------------------------------------------
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <WinNet.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
#include <String.au3>
#include <File.au3>
#include <Array.au3>
#include <Constants.au3>
Global $server
While 1
$encrypt_login=RegRead ("HKEY_LOCAL_MACHINE\SOFTWARE\Connexion","login") ; récupération de la clé login dans la base de registre
$encrypt_pass=RegRead ("HKEY_LOCAL_MACHINE\SOFTWARE\Connexion","pass") ; récupération de la clé pass par la base de registre
$login=_StringEncrypt(0,$encrypt_login,"ùlggtjj54gh") ; décryptage de la variable $encrypt_login
$pass=_StringEncrypt(0,$encrypt_pass,"guj554d255o") ; décryptage de la variable $encrypt_pass
if $login<>"" Then ; test l'existence de la clé login dans la base de registre
_server_list()
_connexion()
Else
_save_login_pass() ; lancement de la fonction _save_login_pass : qui va permettre de saisir un nouveau login et mot de passe
EndIf
WEnd
Func _connexion()
GUICreate("Connexion",400,60,1,1,$WS_POPUPWINDOW,$WS_EX_TOPMOST) ; création d'une fenêtres pop-up où défilent les informations de connexion
GUISetState()
GUISetFont(12,400,"","Times New Roman")
GUICtrlCreateLabel("Connexion au serveur "&$server[0]&" : En Cours...",20,30,400)
GUICtrlSetColor(3,0x990A0A)
GUICtrlCreateLabel("Veuillez patienter !",20,5,400)
GUICtrlSetFont(4,14,100)
For $i=0 To UBound($server) - 1
GUICtrlSetData(3,"Connexion au serveur "& $server[$i] &" : En Cours...") ; mis à jour de la fenêtre pop-up
_WinNet_AddConnection2("","\\"&$server[$i],$login,$pass,1) ; connexion au serveur
If @error=53 then MsgBox (0+16,"Erreur","Le serveur "&$server[$i]&" est injoignable !"&@cr&@CR&"Connexion Impossible !") ; erreur de connexion : serveur injoignable
If @error=1326 Or @error=1219 then
MsgBox (0+16,"Erreur","Erreur de Login ou de mot de passe sur le serveur "&$server[$i]&@cr&@CR&"Connexion Impossible !") ; erreur de connexion : login ou mot de passe
_save_login_pass() ; lancement de la fonction _save_login_pass : qui va permettre de saisir un nouveau login et mot de passe
Else
If @error<>0 Then MsgBox (0+16,"Erreur","Erreur de connexion sur le serveur "&$server[$i]&@cr&@CR&"Connexion Impossible !") ; erreur de connexion : autres
EndIf
Next
Exit
EndFunc
Func _save_login_pass()
#Region ### START Koda GUI section ### Form=D:\Outils\Prog\Autoit\interfaces\win_login_pass.kxf
Global $win_login_pass = GUICreate("Paramètres de Connexion", 277, 164, -1, -1)
Global $lab_Login = GUICtrlCreateLabel("Nom d'utilisateur :", 24, 40, 100, 20)
Global $lab_pass = GUICtrlCreateLabel("Mot de Passe :", 24, 72, 75, 17)
Global $txt_login = GUICtrlCreateInput("", 114, 40, 121, 21)
Global $txt_pass = GUICtrlCreateInput("", 114, 72, 121, 21)
Global $bt_ok = GUICtrlCreateButton("OK", 56, 112, 75, 25)
Global $bt_cancel = GUICtrlCreateButton("Annuler", 152, 112, 75, 25)
Global $icon = GUICtrlCreateIcon("shell32.dll", 45, 1, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$login=GUICtrlRead($txt_login) ; lecture du login dans la boîte input $txt_login
$pass=GUICtrlRead($txt_pass) ; lecture du boîte passe dans la boîte input $txt_pass
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $bt_ok
If $login="" Or $pass="" Then ; test si l'utilisateur à entrer un login ou un mot de passe
MsgBox (0+16,"Erreur","Erreur vous devez indiquer un Login et un mot de passe !")
ContinueLoop ; retour dans la boucle While
EndIf
$encrypt_login=_StringEncrypt(1,$login,"ùlggtjj54gh") ; cryptage de la variable $login
$encrypt_pass=_StringEncrypt(1,$pass,"guj554d255o") ; cryptage de la variable $pass
RegWrite ("HKEY_LOCAL_MACHINE\SOFTWARE\Connexion","login","REG_SZ",$encrypt_login) ; écriture de la variable $encrypt_login dans la base de registre
RegWrite ("HKEY_LOCAL_MACHINE\SOFTWARE\Connexion","pass","REG_SZ",$encrypt_pass) ; écriture de la variable $encrypt_pass dans la base de registre
ExitLoop
Case $bt_cancel
Exit
EndSwitch
WEnd
GUIDelete()
EndFunc
Func _server_list()
$source=@ScriptDir&"\server_list.txt"
if Not FileExists ($source) Then ;test l'existence de server_list.txt sinon création
$file=FileOpen($source,2)
FileWrite($file,"#########################################################################" &@CR& _
"## FICHIER REPONSE DE : CONNEXION.EXE ##" &@CR& _
"#########################################################################" &@CR& _
"## Indiquez ci-dessous le nom ou l'adresse IP des serveurs à atteindre ##" &@CR& _
"## Uniquement 1 serveur par ligne. ##" &@CR& _
"#########################################################################" &@CR& "")
MsgBox (0+16,"Erreur","Veuillez indiquer le nom du ou des serveurs"&@cr&@cr&"dans le fichier "&$source)
Exit
EndIf
_FileReadToArray($source,$server) ;transfert lignes vers un tableau
_ArrayDelete($server,0) ;suppression de $server[0]
For $i=0 To UBound($server,1)
If $server="" Then
MsgBox (0+16,"Erreur","Veuillez indiquer le nom du ou des serveurs"&@cr&@cr&"dans le fichier "&$source)
Exit
EndIf
$iIndex = _ArraySearch($server, "#", 0, 0, 0, 1) ;recherche ligne qui contient "#"
If @error=6 Then ExitLoop ;exitloop quand il n'y a plus de "#"
_ArrayDelete($server,$iIndex) ;suppression de la ligne qui contient "#"
Next
EndFunc