IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Obtimiser un script d'instal auto


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur réseaux et communications
    Inscrit en
    Octobre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur réseaux et communications
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2008
    Messages : 37
    Par défaut Obtimiser un script d'instal auto
    Bonjour a tous!

    Je suis nouveau dans le VBscript(depuis deux jours pour tout dire) Je fait déjà du java et du C en apply(en cours, rien de bien poussé vu que je fessais des études de réseau et pas d'info).
    J'ai fait aussi un peu de prog web en PHP/Sql en travaillant comme développeur sur www.enchantier.com (c'est pas de la pub hein, je travaille plus chez eux^^), avec un petit détour assez traumatisant par le JS.

    Enfin me voila pour vous demander un coup de main. Je cherche a faire un script qui effectue une série d'installation de manière automatique.
    Pour cela je me connecte a un serveur su le quel se trouvent les .exe, je les lance et je simule l'action d'un utilisateur qui ferais okokoksuivantokterminé.

    Voici donc une version beta -- du future script génial:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    '--------------------------------Mappage de ****** sur Q:---------------------------------------------
    On Error Resume Next 
     
    Set WshNetwork = WScript.CreateObject("WScript.Network")
    WshNetwork.MapNetworkDrive "Q:","\\******\images\creation_master",false
     
    if err.Number = 0 Then
            Wscript.Echo "Connection de Q: sur \\******\images\creation_master réussie"
    Else
            Wscript.Echo err.Number & " : " & err.description
    End If
     
    '-----------------------------------------Install de XNvieuw------------------------------------------------
     
    Set WshShell = WScript.CreateObject("WScript.Shell")
    WshShell.Run "Q:\IbisXP03\soft\xnview_xnview_1.90.2_francais_9667.exe"
     
    Wscript.Echo "Début de l'instalation de XNview"
     
       WScript.Sleep 1000
       WshShell.SendKeys "{ENTER}" 'next
       WScript.Sleep 1000
       WshShell.SendKeys "{TAB}" 'switcher sur "I desagree"/"i agree"
       WScript.Sleep 1000
       WshShell.SendKeys "{UP}" 'selectioner "i agree"
       WScript.Sleep 1000
       WshShell.SendKeys "{Enter}" 'next
       WScript.Sleep 1000
       WshShell.SendKeys "{Enter}" 'next
       WScript.Sleep 1000
       WshShell.SendKeys "{Enter}" 'next
       WScript.Sleep 1000
       WshShell.SendKeys "{Enter}" '...
       WScript.Sleep 1000
       WshShell.SendKeys "{Enter}" 
       WScript.Sleep 1000
       WshShell.SendKeys "{TAB}" 
       WScript.Sleep 1000
       WshShell.SendKeys "{Enter}"
       WScript.Sleep 1000
       WshShell.SendKeys "{TAB}" 
       WScript.Sleep 1000
       WshShell.SendKeys "{Enter}"
       WScript.Sleep 3000
     
    Wscript.Echo "Fin de l'instalation de XNview"
     
     
    '--------------------------------Démappage de ****** sur Q:---------------------------------------------
    On Error Resume Next 
     
    WshNetwork.RemoveNetworkDrive("Q:")
     
    if err.Number = 0 Then
            Wscript.Echo "Déconnection de Q: sur \\*****\images\creation_master réussie"
    Else
            Wscript.Echo err.Number & " : " & err.description
    End If
    Il ne fait qu'une seul installe(le but final de scripter c'est d'en faire 25 pendant que l'on bois un café) et il fait déjà vraiment bricolage... J'ai remarqué notamment que si je réduisais un peu trop mes timoutes, ca décalais tout et fessais n'importe quoi.

    La partie que je cherche a ameliorer c'est le bricolage au milieu.
    Y'a pas un moyen un peu moi bancal pour faire la même chose? j'ai vu notamment qu'il étais possible de "communiquer" avec exel ou world. c'est possible avec le setup de xnview(enfin avec d'autre quoi, j'ai pas que ca a installer)? si oui comment?

    Merci d'avance!

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur réseaux et communications
    Inscrit en
    Octobre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur réseaux et communications
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2008
    Messages : 37
    Par défaut
    Le script a grandi et grossi, grâce a l'aide des gus du chat, Merci a tous, surtout a Juvamine et Gorgo-sensei.

    Maintenant, il se lance en ligne de commande avec N argument, lesquels sont des numéros d'installation, qui se trouve dans un fichier externe, il remplis un .log avec les étapes d'avancement du script est les erreurs rencontrées. Il ne plante plus "sauvagement" et fonctione parfaitement.

    Si vous voulez une idée du truc, une petite vidéo que j'ai fait pour le rapport au chef de projet, qui montre l'installation de xnview et AdobeReader en automatique avec le script:

    http://filzup.com/download.php?id=3A683ED81

    Mais j'ai toujours le même problème! Les timoute et les simulation d'entrée clavier, c'est bancal. Ça restera bancal et mettre ça en production, ça me fait quant même mal.

    Le code, complet, pas commenté mais c'est en module donc ca devrais étre lisible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    '---------------------------------------Début Prés-requis-----------------------------------------------
     
    Class InstallToDo
       Public Name
       Public Path
       Public Proc
    End Class 
     
    '---------------------------------------Fin Prés-requis------------------------------------------------
     
     
    '------------------------------Début fonction de contact du .conf--------------------------------------
     
    Function readConf(NumInstall) 
     
    	set objetFichier = CreateObject("Scripting.FileSystemObject")
    	set pointconf = objetFichier.OpenTextFile("IBIS4.conf", 1, False)
     
    	pointconf.skipLine()
     
    	For i= 1 to NumInstall
    		pointconf.skipLine()
    		pointconf.skipLine()
    		pointconf.skipLine()
    		pointconf.skipLine()
    	next
     
    	pointconf.skipLine()
    	RawLineName = pointconf.ReadLine()
    	RawLinePath = pointconf.ReadLine()
    	RawLineProc = pointconf.ReadLine()
     
    	Dim CurentInstallToDo 
    	Set CurentInstallToDo = New InstallToDo
     
    	pos1 = InStr(1, RawLineName, chr(34))
    	pos2 = InStr(pos1 + 1, RawLineName, chr(34))
    	CurentInstallToDo.Name = Mid(RawLineName, pos1+1, pos2 - pos1 -1)
     
    	pos1 = InStr(1, RawLinePath, chr(34))
    	pos2 = InStr(pos1 + 1, RawLinePath, chr(34))
    	CurentInstallToDo.Path = Mid(RawLinePath, pos1+1, pos2 - pos1 -1)
     
    	pos1 = InStr(1, RawLineProc, chr(34))
    	pos2 = InStr(pos1 + 1, RawLineProc, chr(34))
     
    	CurentInstallToDo.Proc =  split(Mid(RawLineProc, pos1+1, pos2 - pos1 -1), "," )
     
    	Set readConf = CurentInstallToDo
     
    End Function 
     
    Function GetNbInstallConf() 
     
    	set objetFichier = CreateObject("Scripting.FileSystemObject")
    	set pointconf = objetFichier.OpenTextFile("IBIS4.conf", 1, False)
     
    	RawLineNbInstall = pointconf.ReadLine()
    	pos1 = InStr(1, RawLineNbInstall, chr(34))
    	pos2 = InStr(pos1 + 1, RawLineNbInstall, chr(34))
    	GetNbInstallConf = Cint(Mid(RawLineNbInstall, pos1+1, pos2 - pos1 -1))
     
    End Function 
     
    '------------------------------Fin fonction de contact du .conf--------------------------------------
     
     
    '-----------------------------------Debut Base des .Log --------------------------------------------------------
     
    set objetFichier = CreateObject("Scripting.FileSystemObject")
    set pointLog = objetFichier.OpenTextFile("IBIS4.log", 2, True)
    set pointconf = objetFichier.OpenTextFile("IBIS4.conf", 1, False)
     
    '----------------------------------Fin Base Base des .Log--------------------------------------------------------
     
     
    '----------------------------- Debut mappage du serveur sur Q:------------------------------------------------
     
    Set WshNetwork = WScript.CreateObject("WScript.Network")
    Set oDrives = WshNetwork.EnumNetworkDrives
     
    '---------- Début bloc rustine si un Q: est deja connecté-------
    For i = 0 to oDrives.Count - 1 Step 2
        if oDrives.Item(i) = "Q:" then
     
    		On Error Resume Next 
    		WshNetwork.RemoveNetworkDrive "Q:", True, True
     
     
    		if err.Number = 0 Then
    		        pointLog.WriteLine "[" & now & "] " & "Deconnection initiale de Q: reussie"
    		Else
    		        pointLog.WriteLine "[" & now & "] " & err.Number & " : " & err.description
    		End If
     
        end if
    Next
    '--------- Fin bloc rustine-------
     
    On Error Resume Next 
     
    Wscript.Echo "Connection a \\serveur..."
    wscript.stdout.write "Login: "
    strLogin = wscript.stdin.readLine 
    Set objPassword = CreateObject("ScriptPW.Password") 
    WScript.StdOut.Write "Mot de passe: " 
    strPassword = objPassword.GetPassword() 
    Wscript.Echo vbcr
     
    WshNetwork.MapNetworkDrive "Q:","\\Serveur\images\creation_master", FALSE, "DOMAIN\" & strLogin, strPassword
     
    if err.Number = 0 Then
        pointLog.WriteLine "[" & now & "] " & "Connection de Q: sur \\Serveur\images\creation_master reussie"
    	wscript.Echo "Connection a \\serveur réussie" & vbcrlf
    Else
    	pointLog.WriteLine "[" & now & "] " & "script stope: Echec de la connection de Q: sur \\Serveur\images\creation_master"
        pointLog.WriteLine "[" & now & "] " & err.Number & " : " & err.description
    	wscript.Echo "Echec de la connexion de Q: sur \\Serveur"
    	Wscript.quit
    End If
     
    '-------------------------------- Fin mappage du serveur sur Q:---------------------------------------------
     
     
    '-------------------------------Début recuperation des paramétres-------------------------------------------
     
    Dim TabInstalToDo()
    Redim TabInstalToDo(wscript.Arguments.length)
     
    if (wscript.Arguments.length = 0) Then
     
    	pointLog.WriteLine "[" & now & "] " & "Script stope: un argument minimum nessesaire"
    	wscript.Echo "Ce script necessite au moins un argument"
     
    	Wscript.quit
    end if
     
    if (wscript.Arguments.length <= GetNbInstallConf()) Then
     
    	For i = 0 to wscript.Arguments.length
     
    		if isNumeric(wscript.arguments(i))AND(InStr(wscript.arguments(i),",") = 0 ) then
     
    			if (0 <= cint(wscript.arguments(i)))AND(cint(wscript.arguments(i)) < GetNbInstallConf()) then
    				pointLog.WriteLine "[" & now & "] " & "Argument " & i & " ( " & wscript.arguments(i) & ") valide."
    				wscript.Echo "Argument " & i & " ( " & wscript.arguments(i) & " ) valide."
    				TabInstalToDo(i) = cint(wscript.arguments(i))
    			else
    				pointLog.WriteLine "[" & now & "] " & "Script stope: Argument " & i & " ( " & wscript.arguments(i) & ") invalide2."
    				wscript.Echo "Argument " & i & " ( " & wscript.arguments(i) & " ) invalide2."
    				Wscript.quit
    			End if
     
    		else
    			pointLog.WriteLine "[" & now & "] " & "Script stope: Argument " & i & " ( " & wscript.arguments(i) & ") invalide."
    			wscript.Echo "Argument " & i & " ( " & wscript.arguments(i) & " ) invalide."
    			Wscript.quit
    		End if
     
    	next
     
    Else
     
    	pointLog.WriteLine "[" & now & "] " & "Script stope: Nombre d'argument invalide"
    	wscript.Echo "Nombre d'arguments invalide"
    	Wscript.quit
     
    End if
     
    pointLog.WriteLine "[" & now & "] " & "Poursuite du script avec arguments: " & join(TabInstalToDo)
    wscript.Echo "Poursuite du script avec arguments: " & join(TabInstalToDo)
     
    '-------------------------------Fin recuperation des paramétres-------------------------------------------
     
     
    '-----------------------------------------Boucle d'Installation------------------------------------------------
     
    Set WshShell = WScript.CreateObject("WScript.Shell")
     
    for cntr = 0 to wscript.Arguments.length - 1
     
    	Set CurentInstallToDoOUT = readConf(TabInstalToDo(cntr))
     
    	pointLog.WriteLine "[" & now & "] " & "Debut de l'installation de " & CurentInstallToDoOUT.Name
    	wscript.Echo vbcrlf & "Debut de l'installation de " & CurentInstallToDoOUT.Name
     
    	On Error Resume Next
     
    		WshShell.Run CurentInstallToDoOUT.path
     
    	if err.Number = 0 Then
            pointLog.WriteLine "[" & now & "] " & "Lancement de " & CurentInstallToDoOUT.path & " reussi"
    		wscript.Echo "Lancement de " & CurentInstallToDoOUT.path & " reussi"
    	Else
    		pointLog.WriteLine "[" & now & "] " & "Programe stope: Erreur lors du lancement de " & CurentInstallToDoOUT.path 
            pointLog.WriteLine "[" & now & "] Erreur " & err.Number & " : " & err.description
    		wscript.Echo "Erreur lors du lancement de " & CurentInstallToDoOUT.path 
    		Wscript.quit
    	End If
     
     
    	For j = LBound(CurentInstallToDoOUT.Proc) To UBound(CurentInstallToDoOUT.Proc)
     
    		if (Left(CurentInstallToDoOUT.Proc(j), 1) = "#") then
     
    			wscript.Echo "  Simulation d'entre clavier: {" & mid(CurentInstallToDoOUT.Proc(j),2) & "}"
    			WshShell.SendKeys "{" & mid(CurentInstallToDoOUT.Proc(j),2) & "}"
     
    		elseif (Left(CurentInstallToDoOUT.Proc(j), 1) = "*") then 
     
    			wscript.Echo "  Timmer: " & mid(CurentInstallToDoOUT.Proc(j),2) & " miliseconde"
    			WScript.sleep mid(CurentInstallToDoOUT.Proc(j),2)
     
    		else
     
    			pointLog.WriteLine "[" & now & "] " & "Script stope: Erreur de Syntaxe dans le ficher .conf"
    			wscript.Echo vbcrlf & "Erreur de Syntaxe dans le ficher .conf"
    			Wscript.quit
     
    		end if
     
    	Next 
     
    	pointLog.WriteLine "[" & now & "] " & "Fin de l'installation de " & CurentInstallToDoOUT.Name
    	wscript.Echo "Fin de l'installation de " & CurentInstallToDoOUT.Name
    	WScript.Sleep 2000
     
    next
     
    '----------------------------------------Fin Boucle d'installation----------------------------------------------
     
     
    '--------------------------------Début Démappage du serveur sur Q:------------------------------------------
     
    On Error Resume Next 
     
    WshNetwork.RemoveNetworkDrive("Q:")
     
    if err.Number = 0 Then
            pointLog.WriteLine "[" & now & "] " & "Deconnection de Q: sur \\Serveur\images\creation_master reussie"
    Else
            pointLog.WriteLine "[" & now & "] Erreur " & err.Number & " : " & err.description
    End If
     
    '-------------------------------- Fin demappage de serveur sur Q:---------------------------------------------
    et le .conf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $NBINSTALL = "3"
     
    $INSTALNAME = "XnView"
    $INSTALLPATH = "Q:\IbisXP03\soft\xnview_xnview_1.90.2_francais_9667.exe"
    $INSTALLPROCESS = "*500,#ENTER,*500,#TAB,*500,#UP,*500,#Enter,*500,#Enter,*500,#Enter,*500,#Enter,*500,#Enter,*500,#Enter,*5000,#Enter"
     
    $INSTALNAME = "AdobeR"
    $INSTALLPATH = "Q:\IbisXP03\soft\Acrobat_Reader\AdbeRdr707_fr_FR.exe"
    $INSTALLPROCESS = "*60000,#ENTER,*500,#Enter,*500,#Enter,*500,#Enter,*60000,#ENTER"
     
    $INSTALNAME = "test"
    $INSTALLPATH = "Q:\IbisXP03\soft\Acrobat_Reader\testsetup.exe"
    $INSTALLPROCESS = "*4000,#tab,*200,#Enter"
    Et le .log après une instal ou tout c'est bien passé
    [31/10/2008 13:41:23] Deconnection initiale de Q: reussie
    [31/10/2008 13:41:32] Connection de Q: sur \\serveur\images\creation_master reussie
    [31/10/2008 13:41:32] Argument 0 ( 0) valide.
    [31/10/2008 13:41:32] Argument 1 ( 1) valide.
    [31/10/2008 13:41:32] Poursuite du script avec arguments: 0 1
    [31/10/2008 13:41:32] Debut de l'installation de XnView
    [31/10/2008 13:41:32] Lancement de Q:\IbisXP03\soft\xnview_xnview_1.90.2_francais_9667.exe reussi
    [31/10/2008 13:41:42] Fin de l'installation de XnView
    [31/10/2008 13:41:44] Debut de l'installation de AdobeR
    [31/10/2008 13:41:44] Lancement de Q:\IbisXP03\soft\Acrobat_Reader\AdbeRdr707_fr_FR.exe reussi
    [31/10/2008 13:43:45] Fin de l'installation de AdobeR
    [31/10/2008 13:43:47] Deconnection de Q: sur \\serveur\images\creation_master reussie

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur réseaux et communications
    Inscrit en
    Octobre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur réseaux et communications
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2008
    Messages : 37
    Par défaut
    Plop, une version commenté (certes, a l'arrache)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    '---------------------------------------Début Prés-requis-----------------------------------------------
     
    Class InstallToDo 'La classe instal to do permet de stoquer le nom, le path du setup et la procédure d'installation d'un programme.
       Public Name
       Public Path
       Public Proc
    End Class 
     
    '---------------------------------------Fin Prés-requis------------------------------------------------
     
     
    '------------------------------Début fonction de contact du .conf--------------------------------------
     
    Function readConf(NumInstall) 'cette fonction lit le .conf, et renvois un objet installtodo contenant les info sur l'instalation de numéro Numinstall passé en paramétre
     
    	set objetFichier = CreateObject("Scripting.FileSystemObject") 
    	set pointconf = objetFichier.OpenTextFile("IBIS5.conf", 1, False) 'ouvre le fibncher de configuration en lecture
     
    	pointconf.skipLine()'fait sauter la premier ligne qui sert pas dans cette fonction
     
    	For i= 1 to NumInstall ' fait sauter le nombre de ligne nessesaire pour ateindre le bout du .conf qui nous interesse.
    		pointconf.skipLine()
    		pointconf.skipLine()
    		pointconf.skipLine()
    		pointconf.skipLine()
    	next
     
    	pointconf.skipLine()
    	RawLineName = pointconf.ReadLine() 'Chope les 3 ligne information qui nous intereessent, le nom, le chemin et la procédure.
    	RawLinePath = pointconf.ReadLine()
    	RawLineProc = pointconf.ReadLine()
     
    	Dim CurentInstallToDo 
    	Set CurentInstallToDo = New InstallToDo
     
    	pos1 = InStr(1, RawLineName, chr(34))
    	pos2 = InStr(pos1 + 1, RawLineName, chr(34))
    	CurentInstallToDo.Name = Mid(RawLineName, pos1+1, pos2 - pos1 -1) ' permet d'isoler NOM dans INSTALLNAME="NOM3
     
    	pos1 = InStr(1, RawLinePath, chr(34))
    	pos2 = InStr(pos1 + 1, RawLinePath, chr(34))
    	CurentInstallToDo.Path = Mid(RawLinePath, pos1+1, pos2 - pos1 -1) 'pareil pour le chemin
     
    	pos1 = InStr(1, RawLineProc, chr(34))
    	pos2 = InStr(pos1 + 1, RawLineProc, chr(34))
     
    	CurentInstallToDo.Proc =  split(Mid(RawLineProc, pos1+1, pos2 - pos1 -1), "," ) ' met chaque etape de la procédure dans une case du tableau
     
    	Set readConf = CurentInstallToDo ' c'est le "ruturn" de vbs
     
    End Function 
     
    Function GetNbInstallConf() 'cette fonction lis la premiére ligne du fichier, qui contient le nombre d'install maximum
     
    	set objetFichier = CreateObject("Scripting.FileSystemObject")
    	set pointconf = objetFichier.OpenTextFile("IBIS5.conf", 1, False) 'ouvre le .conf en lecture
     
    	RawLineNbInstall = pointconf.ReadLine() ' récupére la ligne puis isole l'info dans la ligne
    	pos1 = InStr(1, RawLineNbInstall, chr(34))
    	pos2 = InStr(pos1 + 1, RawLineNbInstall, chr(34))
    	GetNbInstallConf = Cint(Mid(RawLineNbInstall, pos1+1, pos2 - pos1 -1))
     
    End Function 
     
    '------------------------------Fin Fonction de contact du .conf--------------------------------------
     
     
    '-----------------------------------Debut Base des .Log --------------------------------------------------------
     
    set objetFichier = CreateObject("Scripting.FileSystemObject")
    set pointLog = objetFichier.OpenTextFile("IBIS5.log", 2, True) 'ouvre le fichier en ecriture par ajout(pour que l'ecriture ajoute les ligne a la fin)
     
    '----------------------------------Fin Base Base des .Log--------------------------------------------------------
     
     
    '----------------------------- Debut mappage de serveur sur Q:------------------------------------------------
     
    Set WshNetwork = WScript.CreateObject("WScript.Network")
    Set oDrives = WshNetwork.EnumNetworkDrives 'ce truc renvois une colection d'objet contenat des infos sur les lecteurs
     
    '---------- Début bloc rustine si un Q: est deja connecté-------
    For i = 0 to oDrives.Count - 1 Step 2 ' on passe en revue les lecteurs
        if oDrives.Item(i) = "Q:" then ' si on trouve un Q:
     
    		On Error Resume Next 'début gestion d'erreur
     
    		WshNetwork.RemoveNetworkDrive "Q:", True, True ' on le fait sauter
     
     
    		if err.Number = 0 Then 'gestion d'erreur
    		        pointLog.WriteLine "[" & now & "] " & "Deconnection initiale de Q: reussie" ' et  un petit message tout vas bine dans le .log.
    		Else
    		        pointLog.WriteLine "[" & now & "] " & err.Number & " : " & err.description ' ou tout vas pas bien, on y met le code d'erreur
    		End If
     
        end if
    Next
    '--------- Fin bloc rustine-------
     
    On Error Resume Next 'début gestion d'erreur
     
    ' récuperation du login, du password pour le résaux
    Wscript.Echo "Connection a \\serveur..." 
    wscript.stdout.write "Login: "
    strLogin = wscript.stdin.readLine 
    Set objPassword = CreateObject("ScriptPW.Password") 
    WScript.StdOut.Write "Mot de passe: " 
    strPassword = objPassword.GetPassword() 
    Wscript.Echo vbcr
     
    ' conection au serveur avec les infos récuperés
    WshNetwork.MapNetworkDrive "Q:","\\serveur\images\creation_master", FALSE, "DOMAIN\" & strLogin, strPassword 
     
    if err.Number = 0 Then ' en fonction du code d'erreur, afichage console et ecriture dans le .log
        pointLog.WriteLine "[" & now & "] " & "Connection de Q: sur \\serveur\images\creation_master reussie"
    	wscript.Echo "Connection a \\serveur réussie" & vbcrlf 'tout vas bien
    Else
    	pointLog.WriteLine "[" & now & "] " & "script stope: Echec de la connection de Q: sur \\serveur\images\creation_master"
        pointLog.WriteLine "[" & now & "] " & err.Number & " : " & err.description 'rien ne vas plus
    	wscript.Echo "Echec de la connection de Q: sur \\serveur"
    	Wscript.quit 'suspend le script(erreur critique)
    End If
     
    '-------------------------------- Fin mappage de serveur sur Q:---------------------------------------------
     
     
    '-------------------------------Début recuperation des paramétres-------------------------------------------
     
    Dim TabInstalToDo()
    Redim TabInstalToDo(wscript.Arguments.length) 'ce tableau vas servir a heberger la version numérique des arguments
     
    if (wscript.Arguments.length = 0) Then 'si il n'y a pas d'argument
     
    	pointLog.WriteLine "[" & now & "] " & "Script stope: un argument minimum nessesaire"
    	wscript.Echo "Ce script necessite au moins un argument" ' un petit message d'erreur
     
    	Wscript.quit ' et on suspend le script (erreur critique)
    end if
     
    if (wscript.Arguments.length <= GetNbInstallConf()) Then 'si il n'y a pas plus d'argument que le maximum d'argument posible(ne nombre d'instal dans le .conf)
     
    	For i = 0 to wscript.Arguments.length ' on passe les argument en revue
     
    		if isNumeric(wscript.arguments(i))AND(InStr(wscript.arguments(i),",") = 0 ) then ' on test le si les arguments sont numérique et si ils ne sont pas a virgule
     
    			if (0 <= cint(wscript.arguments(i)))AND(cint(wscript.arguments(i)) < GetNbInstallConf()) then 'verife que l'argument est entre 0 et le nombre d'instal Max
    				pointLog.WriteLine "[" & now & "] " & "Argument " & i & " ( " & wscript.arguments(i) & ") valide."
    				wscript.Echo "Argument " & i & " ( " & wscript.arguments(i) & " ) valide."
    				TabInstalToDo(i) = cint(wscript.arguments(i)) 'mainetnat que l'on sait que c'est un entier positif dans la bonne plage, on valide l'argument et on le place dans le tableau.
    			else
    				pointLog.WriteLine "[" & now & "] " & "Script stope: Argument " & i & " ( " & wscript.arguments(i) & ") invalide2."
    				wscript.Echo "Argument " & i & " ( " & wscript.arguments(i) & " ) invalide2."
    				Wscript.quit ' argument invalide, erreur critique, suspention du script
    			End if
     
    		else
    			pointLog.WriteLine "[" & now & "] " & "Script stope: Argument " & i & " ( " & wscript.arguments(i) & ") invalide."
    			wscript.Echo "Argument " & i & " ( " & wscript.arguments(i) & " ) invalide."
    			Wscript.quit  'argument invalide, erreur critique, suspention du script
    		End if
     
    	next
     
    Else
     
    	pointLog.WriteLine "[" & now & "] " & "Script stope: Nombre d'argument invalide"
    	wscript.Echo "Nombre d'arguments invalide"
    	Wscript.quit  'nombre d'argument invalide, erreur critique, suspention du script
     
    End if
     
    'si on arive jusque la, on colle une petite confirmation sur la console et le .log , avec rapel des arguments.
    pointLog.WriteLine "[" & now & "] " & "Poursuite du script avec arguments: " & join(TabInstalToDo)
    wscript.Echo "Poursuite du script avec arguments: " & join(TabInstalToDo) 
     
    '-------------------------------Fin recuperation des paramétres-------------------------------------------
     
     
    '-----------------------------------------Boucle d'Installation------------------------------------------------
     
    Set WshShell = WScript.CreateObject("WScript.Shell") ' on récupére un objet nessesaire pour lancer un setup
     
    for cntr = 0 to wscript.Arguments.length - 1 ' on fait le tour des numéros install a faire
     
    	Set CurentInstallToDoOUT = readConf(TabInstalToDo(cntr)) 'on récupére l'objet instaltodo représantant l'instalation a faire via la fonction read conf 
     
    	pointLog.WriteLine "[" & now & "] " & "Debut de l'installation de " & CurentInstallToDoOUT.Name 'un p't message, console et .log
    	wscript.Echo vbcrlf & "Debut de l'installation de " & CurentInstallToDoOUT.Name
     
    	On Error Resume Next 'gestion d'erreur
     
    		WshShell.Run CurentInstallToDoOUT.path 'on execute le setup.
     
    	if err.Number = 0 Then ' si tou c'est bien passé, mesage tout vas bien
            pointLog.WriteLine "[" & now & "] " & "Lancement de " & CurentInstallToDoOUT.path & " reussi"
    		wscript.Echo "Lancement de " & CurentInstallToDoOUT.path & " reussi"
    	Else ' sinon code d'erreur
    		pointLog.WriteLine "[" & now & "] " & "Programe stope: Erreur lors du lancement de " & CurentInstallToDoOUT.path 
            pointLog.WriteLine "[" & now & "] Erreur " & err.Number & " : " & err.description
    		wscript.Echo "Erreur lors du lancement de " & CurentInstallToDoOUT.path 
    		Wscript.quit ' et suspention du script
    	End If
     
     
    	For j = LBound(CurentInstallToDoOUT.Proc) To UBound(CurentInstallToDoOUT.Proc) ' on passe en revue chaque instruction
     
    		if (Left(CurentInstallToDoOUT.Proc(j), 1) = "#") then ' si le prefix est #
     
    			wscript.Echo "  Simulation d'entre clavier: {" & mid(CurentInstallToDoOUT.Proc(j),2) & "}"
    			WshShell.SendKeys "{" & mid(CurentInstallToDoOUT.Proc(j),2) & "}" ' un p'ti coup de sendkey
     
    		elseif (Left(CurentInstallToDoOUT.Proc(j), 1) = "*") then 'si le préfix est *
     
    			wscript.Echo "  Timmer: " & mid(CurentInstallToDoOUT.Proc(j),2) & " miliseconde"
    			WScript.sleep mid(CurentInstallToDoOUT.Proc(j),2) ' un p'ti timoute
     
    		else ' sinon, il y a un probléme dans le .conf
     
    			pointLog.WriteLine "[" & now & "] " & "Script stope: Erreur de Syntaxe dans le ficher .conf"
    			wscript.Echo vbcrlf & "Erreur de Syntaxe dans le ficher .conf" ' un p'ti message
    			Wscript.quit 'erreur critique, on suspend le script
     
    		end if
     
    	Next 
     
    	pointLog.WriteLine "[" & now & "] " & "Fin de l'installation de " & CurentInstallToDoOUT.Name ' un petit message pour signaler la fin de l'install
    	wscript.Echo "Fin de l'installation de " & CurentInstallToDoOUT.Name
    	WScript.Sleep 2000
     
    next
     
    '----------------------------------------Fin Boucle d'installation----------------------------------------------
     
     
    '--------------------------------Début Démappage de serveur sur Q:------------------------------------------
     
    On Error Resume Next ' gestion d'erreur
     
    WshNetwork.RemoveNetworkDrive("Q:") ' demapage du serveur
     
    if err.Number = 0 Then 'et gestion d'erreur et messages asociés. 
            pointLog.WriteLine "[" & now & "] " & "Deconnection de Q: sur \\serveur\images\creation_master reussie"
    Else
            pointLog.WriteLine "[" & now & "] Erreur " & err.Number & " : " & err.description
    End If
     
    '-------------------------------- Fin demappage de serveur sur Q:---------------------------------------------
     
    'THE END!

Discussions similaires

  1. Script d'installation auto
    Par Deusvx dans le forum Programmation et administration système
    Réponses: 0
    Dernier message: 05/12/2013, 22h27
  2. Réponses: 0
    Dernier message: 10/02/2011, 18h16
  3. script d'installation automatique
    Par zero7 dans le forum Windows
    Réponses: 2
    Dernier message: 23/05/2006, 14h11
  4. Modifier le script d'installation
    Par onet dans le forum Debian
    Réponses: 2
    Dernier message: 04/04/2006, 16h54
  5. [débutant] Comment tester scripts sans installer Oracle ?
    Par belokan dans le forum Installation
    Réponses: 17
    Dernier message: 25/10/2005, 10h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo