Skip navigation.

exploreopera

| Help

Sign up | Help

photo

Groumphy au quotidien

Posts tagged with "netlogon"

AutoIt : créer un sondage

, , , ...

Dans les très petites entreprises, déployer un système de sondage est assez fastidieux... Mais surtout onéreux.

Toutefois, il y a des moyens gratuits et puis il y a le bricolage par le développement d'un petit outil... Regardons comment cela se passe !

Définissons en premier temps les propriétés de l'exécutable
; *********************************************************
; Propriétés de l'exécutable
; *********************************************************
#Region
#AutoIt3Wrapper_Version=dev
#AutoIt3Wrapper_outfile=eiq.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Res_Description=Logiciel d'enquête
#AutoIt3Wrapper_Res_Fileversion=0.0.1.1
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#AutoIt3Wrapper_Res_LegalCopyright=© Groumphy 2008
#AutoIt3Wrapper_Res_Language=2060
#AutoIt3Wrapper_Res_Field=Company|Privé
#AutoIt3Wrapper_Icon=monIcone.ico
#EndRegion


Les obligatoires :
#NoTrayIcon
#include <GUIConstants.au3>


Les variables
; *********************************************************
; Déclaration des variables
; ********************************************************* 
Dim $s_fichierINI = "parametres.ini"
Dim $s_fichierResultat = "enquete.txt"
Dim $s_lectureSectionUtilisateur = IniReadSection($s_fichierINI, "UTILISATEURS")
Dim $i


L'appel des fonctions...
_version("DEV")
_verificationFichierResultat()


Les fonctions...

Vérifie que le nom d'utilisateur se trouvant dans le fichier INI est bien de valeur Y (pour yes), si la valeur est bien Y, lance la GUI pour l'enquête...
Func _routineIdentification()
For $i = 1 To $s_lectureSectionUtilisateur[0][0]
If $s_lectureSectionUtilisateur[$i][0] = @UserName Then
If $s_lectureSectionUtilisateur[$i][1] = "Y" Then _GUI()
Else
;MsgBox(0, "", "Ne rien faire")
EndIf
Next
EndFunc


La GUI principale.
Elle affiche deux labels, une combox qui permet un choix, ce choix est récolté et placé dans un fichier texte.
Func _GUI()
MsgBox(0, "", "lancement GUI")
#Region ### START Koda GUI section ### Form=i:\script\en développement\enquete satisfaction it\gui_enqueteinformatique.kxf
GUICreate("Enquête informatique", 272, 219, 246, 115)
GUICtrlCreateLabel("Afin d'optimiser son efficacité, le service informatique ", 10, 10, 254, 17)
GUICtrlCreateLabel("vous demande de répondre à la question suivante :", 10, 30, 256, 17)
GUICtrlCreateGroup(" Qualité du support : ", 25, 55, 225, 105)
GUICtrlCreateLabel("Veuillez choisir dans la liste déroulante.", 35, 75, 185, 17)
GUICtrlCreateLabel("Quelle est la qualité du support donné ?", 35, 95, 190, 17)
$cbx_ChoixListeDeroulante = GUICtrlCreateCombo("Sélectionnez votre choix", 35, 115, 200, 25, -1, -1)
GUICtrlSetData($cbx_ChoixListeDeroulante, "Excellente|Très bonne|Bonne|Médiocre|Très mauvaise")
GUICtrlSetTip($cbx_ChoixListeDeroulante, "Faite votre choix dans la liste déroulante")
GUICtrlSetCursor ($cbx_ChoixListeDeroulante, 0)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$btn_Valider = GUICtrlCreateButton("&Valider", 160, 175, 100, 33, 0)
GUICtrlSetTip($btn_Valider, "Valider l'enquête informatique")
GUICtrlSetCursor ($btn_Valider, 0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
;Case $cbx_ChoixListeDeroulante
Case $btn_Valider
$cbx_ChoixListeDeroulante = GUICtrlRead($cbx_ChoixListeDeroulante)
If $cbx_ChoixListeDeroulante = "Sélectionnez votre choix" Then
MsgBox(0 + 32, "Information", "Vous n'avez effectué aucun choix dans la liste déroulante.")
Else
MsgBox(0, "Tracking", "Choix : " & $cbx_ChoixListeDeroulante)
GUISetState(@SW_HIDE)
; Lancer l'écriture dans un fichier texte !!
Dim $s_OuvertureFichier
$s_OuvertureFichier = FileOpen($s_fichierResultat, 1)
FileWriteLine($s_OuvertureFichier, @UserName & @TAB & $cbx_ChoixListeDeroulante)
FileClose($s_OuvertureFichier)
_ChangeValeurINI("N")
MsgBox(0, "", "Valeur changée en N, sortie")
EndIf
EndSwitch
WEnd
EndFunc


Une fonction permettant de changer la valeur du nom d'utilisateur... Le plus simple possible.
Func _ChangeValeurINI($s_Valeur)
IniWrite($s_fichierINI, "UTILISATEURS", @UserName, $s_Valeur)
EndFunc


Fonction vérifiant la présence des fichiers obligatoires...
Func _verificationFichierResultat()
If NOT FileExists($s_fichierResultat) Then 
MsgBox(0, "Erreur", "Pas de fichier résultat !")
Exit
ElseIf NOT FileExists($s_fichierINI) Then
MsgBox(0, "Erreur", "Pas de fichier d'initialisation")
Exit
Else
_routineIdentification()
EndIf
EndFunc


Une fonction Goonie pour débuter et vérifier l'état d'avancement de la fonction...
Func _version($s_typeVersion)
If $s_typeVersion = "DEV" Then
$s_typeVersion = "Le logiciel lancé est en devélopement et est présenté à titre d'idée. V.DEV"
ElseIf $s_typeVersion = "ALPHA" Then
$s_typeVersion = "Le logiciel lancé est en développement et nécessite encore des améliorations " & @CR & _
"toutefois il est parfaitement exploitable. V.ALPHA"
ElseIf $s_typeVersion = "BETA" Then
$s_typeVersion = "Le logiciel lancé est en version de test et nécessite encore des corrections " & @CR & _
"Merci de faire un feedback à xxxx. V.BETA"
ElseIf $s_typeVersion = "PROD" Then
$s_typeVersion = ""
EndIf
If NOT $s_typeVersion = "" Then
MsgBox(0 + 64, "Information", $s_typeVersion)
EndIf
EndFunc


Simple et efficace. C'était une simple idée. Mais elle est fonctionnelle. C'est le principal.

Mais que contiennent les autres fichiers ?
Le fichier INI :
[UTILISATEURS]
USER1=Y
USER2=Y
# on continue les utilisateurs au fur et à mesure, 
# seul le login compte. La valeur N ne fera aucun effet sur la fonction


Le fichier résultats comportera les valeurs suivantes :
USER1 (espace blanc, tabulation...) CoteDonnées (ici Médiocre, bonne, excellente...)
USER2 Bonne
USER3 Excellente


Les résultats du fichier texte sont utilisables dans un tableur, une base de données, etc.
Pour lancer l'enquête, il faut placer simplement un appel dans le NETLOGON pourquoi pas...

Qu'en pensez-vous ?

Installation d’imprimante par script AutoIt

, , , ...

Dans un réseau d’entreprise, il n’est pas rare qu’on utilise encore les script en MS-DOS pour installer une imprimante. Cela se fait grâce à l’utilitaire Con2Prt.exe de Microsoft.

Il suffit alors de composer un petit script dans le style :
REM DEFINITION DES VARIABLES
SET PRTSRV=NOMSERVERIMPRESSION
SET PRTSRVBCK=NOMSERVERIMPRESSIONBACKUP
CHANGE CLIENT /DEFAULT_PRINTERS
REM SUPPRESSION IMPRIMANTE
%LOGONSERVER%\NETLOGON\CON2PRT.EXE /F
IF %CLIENTNAME%==NOMDELASTATION Goto NOMSIGNET
:AUTRES
%LOGONSERVER%\NETLOGON\CON2PRT.EXE /CD \\%PRTSRV%\NOMDEPARTAGE
GOTO END
:NOMSIGNET
%LOGONSERVER%\NETLOGON\CON2PRT.EXE /CD \\%PRTSRV%\NOMDEPARTAGE
GOTO END
:END

EXIT

Toutefois il y a moyen de faire cela plus sympathiquement : j’entend en AutoIt…
Passons en revue deux manières simples.
La première est d’utiliser similairement l’application CON2PRT.EXE de Microsoft, la seconde la DLL permettant l’installation d’une imprimante réseau : PRINTUI.DLL.

Vu que nous pouvons tout aussi bien utiliser le nom de la machine ou le nom d’utilisateur, et vu que j’ai déjà présenté dans le script MS-DOS que c’était le nom de la machine, changeons cela avec le nom d’utilisateur.
Décentralisons nos informations dans un fichier INI tel :
[SERVERS]
PRINTSERVER=NomDuServerImpression
LOGONSERVER=LogonServer
[USERNAME]
GROUMPHY=Imprimante1|Imprimante2
GROUMPHY2=0

Groumphy et Groumphy2 sont les noms d’utilisateurs standards…
Enregistrons ce fichier.
Commençons par définir ce fichier en variable.
Global Const $s_INI = "InstImpNetLogon.ini"

Si nous utilisons CON2PRT.EXE rajoutons pourquoi pas :
Global Const $s_C2P = "con2prt.exe"

Rajoutons une structure pour pouvoir vérifier la présence de nos fichiers nécessaire :
Func _test()
            If NOT FileExists(@ScriptDir & "\" & $s_INI) Then _error($s_INI)
            If NOT FileExists(@ScriptDir & "\" & $s_C2P) Then _error($s_C2P)
EndFunc
Func _error($param1)
            MsgBox(0 + 16, "Error", "Fatal Error. Application 'Core' File Not Found." & @CR & _
                                                                                  "Error Code : " & @ScriptLineNumber & @CR & _
                                                                                  "File Code : " & $param1 & " not found." & @CR & @CR & _
                                                                                  "Please contact your System Administrator",10)
            Exit
EndFunc

Avant de commencer il est bon de supprimer toutes les imprimantes (identiquement à notre script MS-DOS).
Func _deletePrt()
            RunWait(@ScriptDir & "\" & $s_C2P & " /f")
EndFunc

Et de poser les variables :
Global Const $s_PrtServer = IniRead($s_INI, "SERVERS", "PRINTSERVER", "")
Global Const $s_LogonServer = IniRead($s_INI, "SERVERS", "LOGONSERVER", "")
Dim $s_UserName, $s_iniRead, $s_Compteur
            $s_UserName = @UserName
            $s_iniRead = IniRead($s_INI, "USERNAME", $s_UserName, "")
            $s_iniRead = StringSplit($s_iniRead, "|")

Parfais. La structure de base est en place.
Comme vous pouvez le constater dans le fichier INI j’ai mis « 0 » pour l’utilisateur Groumphy2. « 0 » m’indique que je ne dois pas installer d’imprimante.
Faisons une petite structure conditionnelle de ce type alors :
If $s_iniRead[1] = 0 Then
            MsgBox(0 + 64, "Information", "No printers to install... Exit of script.", 10)
            Exit
EndIf

Mais si nous devons installer des imprimantes, il nous faut une boucle permettant de faire cela :
$s_Compteur = 0
Do
            $s_Compteur = $s_Compteur + 1
            _installPrt($s_iniRead[$s_Compteur])
Until $s_Compteur = $s_iniRead[0]

Dans cette boucle, j’appele la function _installPrt que voiçi :
Func _installPrt($param2)
            RunWait("\\" & $s_LogonServer & "\" & $s_C2P & " /c " & "\\" & $s_PrtServer & "\" & $param2)
EndFunc

Et il ne faut rien de plus.

Pour maintenant rajouter un nouvel utilisateur nous n’aurons plus qu’à changer le fichier INI.

Nous avons aussi la possibilité de définir l’imprimante par défaut. Pour ce faire il suffit de rajouter une structure conditionnelle dans la fonction _installPrt pour que la première imprimante prise dans la zone de mémoire soit celle par défaut (installable avec /CD en place de /C).

Pour installer l’imprimante avec PRINTUI.DLL nous ferons exactement de même… Sauf que nous aurons la commande suivante :
$comm = RunWait("rundll32 printui.dll,PrintUIEntry /in /q /n\\" & $s_PrtServer & "\" & $param2, "", @SW_HIDE)


Plus simple, nous ne pouvons le faire. Cela fonctionne correctement en pratique…
October 2008
MTWTFSS
September 2008November 2008
12345
6789101112
13141516171819
20212223242526
2728293031