Modifier un .ini en réseau

Description

Ce script sert à remplacer une occurence dans un fichier cible pour une liste de machines.

Le respect de la casse peut-être configuré.
Le fichier modifié est sauvegardé en Nomfichier.ini#

Exemple : modifier paramètre dans boot.ini pour des machines cibles.
boot.ini sera sauvegardé en boot.ini#

Source / Exemple :


'==========================================================================
'
' Script VBS
'
' UTILITY : Remplace une occurence dans un fichier cible pour une liste de machines
'
' AUTHOR: Nepthys
' DATE  : 01/04/2005
'
'==========================================================================

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Définition des variables :
'
'chemin du fichier a traiter (exemple : C:\winnt\file.ini)
ini="C:\temp\boot.ini"
'Le remplacement respecte la casse (1 pour non | 0 pour oui)
casse="1"
'
'IMPORTANT :
'Si votre occurence contient des guillemets, veuillez les doubler
'Exemple : Pour remplacer l'occurence : mon programme "windows" fonctionne  
'Veuillez ecrire old_value="mon programme ""windows"" fonctionne"
'
'
'Occurence a remplacer
old_value="Microsoft Windows 2000 Professional"
'Occurence a mettre a la place de old_value
new_value="Microsoft 2000"
'liste des machines a traiter
liste_wks="wks.txt"
'
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'On Error Resume Next
Set FSO = CreateObject("Scripting.FileSystemObject")
'Creation du fichier de resultat 
Set fichier_log = fso.CreateTextFile("resultat.hta", True)
fichier_log.Writeline"<HTML><HEAD><TITLE>Résultat du script</TITLE>"
fichier_log.Writeline"<HTA:APPLICATION APPLICATIONNAME=HTANotePad ID=oHTA BORDER=thick BORDERSTYLE=normal CAPTION=yes CONTEXTMENU=yes INNERBORDER=yes MAXIMIZEBUTTON=yes" 
fichier_log.Writeline"MINIMIZEBUTTON=no NAVIGABLE=yes ICON=explorer.exe SCROLL=yes SCROLLFLAT=yes SELECTION=yes SHOWINTASKBAR=yes SINGLEINSTANCE=no SYSMENU=yes VERSION=0.3 WINDOWSTATE=normal>"
fichier_log.Writeline"</HEAD^>^<BODY BGCOLOR=#DDDDDD>"
fichier_log.Writeline"<FONT FACE=verdana size=1>Fichier : <I>" & ini
fichier_log.Writeline"</I><BR><BR>Occurence à remplacer : <I>" & old_value
fichier_log.Writeline"</I><BR>Occurence de remplacement : <I>" & new_value
fichier_log.Writeline"</I><BR><BR>Respect de la casse : <I>"
	If casse=1 Then 
	fichier_log.Writeline " Désactivé<BR>"
	Else 
	fichier_log.Writeline " Activé<BR>"
	End If
fichier_log.Writeline"</I></FONT><BR>"
fichier_log.Writeline"<TABLE BGCOLOR=#FFFFFF ALIGN=center BORDERCOLOR=#DDDDDD FRAME=void RULES=rows cellspacing=0>"
fichier_log.Writeline"<TR><TD><B><FONT FACE=verdana size=2>Workstation</B></TD><TD><FONT FACE=verdana size=2><B>&nbsp;&nbsp;Network&nbsp;&nbsp;&nbsp;</B></TD><TD><FONT FACE=verdana size=2><B>Détails sur le fichier</B></TD></TR>"	
'Je renomme le ini en ini reseau
ini = Replace(ini, ":", "$", 1, -1, 1)
'J'ouvre la liste des machines
Set liste = fso.opentextfile(liste_wks,1)
'Pour chaque machine, j'effectue la procedure ci-dessous
Do While liste.AtEndOfStream <> True
	'J'affecte le nom de la machine a la variable wks
	wks = liste.Readline
	'Je Ping la machine
	'Elle est allumée
	If ping(wks) Then
 		'J'appelle la fonction tester
		tester(wks)
	'Elle est éteinte
	Else
		'J'ecris l'etat de la machine dans le fichier Log
 		fichier_log.Writeline "<TR><TD><FONT FACE=verdana size=1>" & wks & "</TD><TD><FONT FACE=verdana size=1 color=RED>&nbsp;&nbsp;OFF</TD><TD></TD>"
	End If
Loop
'Je ferme la liste de machines
liste.close
'Je lance le fichier de resultat
Set shell = CreateObject("Wscript.Shell")
shell.run("resultat.hta")

'Je teste le fichier, si l'occurence existe, je le modifie (appel de la fonction modif)
Function tester(wks)
	'Je définis le chemin réseau du fichier a tester
	old_ini="\\" & wks & "\" & ini
	'Je teste l'existance du fichier
	'Le fichier existe
	If fso.FileExists(old_ini) Then
		'Ouverture du fichier old_ini
		Set file = FSO.OpenTextFile(old_ini,1,True)
		'Variable detect servira a detecter l'existance de l'occurence dans le fichier
		detect="0"
		'Pour chaque ligne du fichier old_ini, j'execute la procedure ci-dessous
		Do While file.AtEndOfStream <>True
			'Variable ligne contient la ligne en cours
			ligne = file.Readline
			'Si la ligne contient l'occurence recherchee, j'incrémente la variable detect
			if Instr(1, ligne, old_value, casse) > 0 Then
				detect=detect+1
			end If
		Loop
		'Je ferme le fichier
		file.close
		'Occurence trouvée, j'ecris le resultat dans le log et j'appelle la fonction modif
		If detect>0 Then
			myLog="<TD><FONT FACE=verdana size=1 color=Green>&nbsp;&nbsp;ON</TD><TD><FONT FACE=verdana size=1>fichier modifié</TD>"
			modifier(wks)
		'Aucune occurence n'est trouvée, j'ecris le resultat dans le log
		Else
			myLog="<TD><FONT FACE=verdana size=1 color=Green>&nbsp;&nbsp;ON</TD><TD><FONT FACE=verdana size=1>l'occurence (" & old_value & ") n'existe pas </TD>"
		End If
	'Le fichier n'existe pas
	Else
		myLog="<TD><FONT FACE=verdana size=1 color=Blue>&nbsp;&nbsp;ON</TD><TD><FONT FACE=verdana size=1>Innexistant</TD>"
	End If
	'J'ecris le resultat pour le traitement de la machine cible dans le fichier de Log
	fichier_log.Writeline "<TR><TD><FONT FACE=verdana size=1>" & wks & "</TD>" & mylog & "</TR>"
End Function

Function modifier(wks)
	'Je définis le chemin réseau du fichier a modifier
	old_ini="\\" & wks & "\" & ini
	'Si La sauvegarde du fichier .old_ini est détectée, je la supprime
	If FSO.FileExists(old_ini & "#") Then fso.GetFile(old_ini & "#").delete
	'Creation de la sauvegarde du .old_ini
	new_ini=old_ini + "##"
	Set New_ini = fso.CreateTextFile(new_ini, True)
	'Ouverture du fichier old_ini
	Set fichier = fso.opentextfile(old_ini,1)
	'Pour chaque ligne du fichier old_ini, j'execute la procedure ci-dessous
	Do While fichier.AtEndOfStream <> True
		'Variable ligne contient la ligne en cours
		ligne = fichier.Readline
		'Si la ligne contient l'occurence recherchee, j'effectue la procedure ci-dessous
		if Instr(1, ligne, old_value, casse) > 0 Then
			'Je remplace l'occurence dans la ligne				
			ligne = Replace(ligne, old_value, new_value, 1, -1, casse)
		end If
		'Jécrit la ligne en cours de traitement dans le old_ini temporaire
		new_ini.Writeline ligne			
	Loop
	'Je ferme les deux fichiers
	new_ini.close
	fichier.close
	'Je renomme le fichier ini en ini#
	Set ini_1 = fso.GetFile(old_ini)
	ini_1.Move (old_ini & "#")
	'Je renomme le nouveau fichier ini## en ini
	Set ini_2 = fso.GetFile(old_ini & "##")
	ini_2.Move (old_ini)
End Function

'FONCTION DE ping
function ping(computer)
  	dim sh: set sh = CreateObject("WScript.Shell")
  	dim t0: t0 = Timer
  	sh.Run "%comspec% /c ping -n 2 -i 3 " & computer, 0, True
  	if timer - t0 > 2 then ping = false else ping = true
End Function

Conclusion :


Important:
Ce script a été conçu pour être exécuté dans un domaine. Il doit être exécuté avec les droits d'administrateur.

J'ai appris VBS en faisant ce script, j'attend vos commentaires et conseils d'optimisation !

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.