| 12
 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! | 
Partager