TUTOS.EU

Reboot automatique du serveur si Qfarm /load de 20000 après le boot du système

Vbscript pour un reboot automatique d'un serveur Citrix 6.5 si après le boot de la machine Qfarm /load retourne une charge de 20000

Option Explicit
'2015 06 11
'Pour citrix
'On récupère la charge du serveur avec qfarm /load
'Si la charge est de 20000 et que cela fait plus de 120 minutes que le script n'a pas rebooté la machine, alors il reboot le serveur
'Idealement lancer ce script via une tache planifiee qui declenche 4 minutes apres le boot du systeme

Dim objFSO, objFichierLog, objFichierTimeStamp, CheminScriptActuel, CheminFichierdeLog, CheminFichierHeureDernierReboot, NomFichier, MaLigne
Dim varInterval, vComputerName
Dim WSHShell, ObjExec01, ObjExec02
Dim Commande, UneLigneDeResultat
Dim Position, TauxChargeCitrix
Dim NumeroLigne

Const ForReading = 1
Const ForWritting = 2
Const ForAppending = 8

CheminScriptActuel = Left(wscript.scriptfullname,Len(wscript.scriptfullname)-Len(wscript.scriptname)-1)

NomFichier = wscript.scriptname
Position = InstrRev(NomFichier,".")
NomFichier = Left(NomFichier, Position - 1)

CheminFichierdeLog = CheminScriptActuel & "\" & NomFichier & "_Log.txt"
CheminFichierHeureDernierReboot = CheminScriptActuel & "\" & NomFichier & "_HeureDernierReboot.txt"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFichierLog = objFSO.OpenTextFile(CheminFichierdeLog, ForWritting, True)

Set WSHShell = CreateObject("WScript.Shell")
vComputerName = WSHShell.ExpandEnvironmentStrings("%COMPUTERNAME%")

objFichierLog.WriteLine(Now)

Commande = "cmd.exe /C ""qfarm /load |find /I """ & vComputerName & """"""

Set ObjExec01 = WSHShell.Exec(Commande)
objFichierLog.WriteLine(VbTab & "Commande : " &  Commande)

NumeroLigne = 0
Do While Not ObjExec01.StdOut.AtEndOfStream

	'On récupère la ligne
	NumeroLigne = NumeroLigne + 1
	UneLigneDeResultat = ObjExec01.StdOut.ReadLine()
	objFichierLog.WriteLine(VbTab & "Ligne de sortie " & NumeroLigne & " : " &  UneLigneDeResultat)
	
	TauxChargeCitrix = Trim(UneLigneDeResultat)
	Position = InstrRev(TauxChargeCitrix," ")
	If Position > 0 Then
		TauxChargeCitrix = Mid(TauxChargeCitrix, Position+1)
		objFichierLog.WriteLine(VbTab & "TauxChargeCitrix :  " & TauxChargeCitrix)
		
		'Si on a un Qfarm /load de 2000, il faut rebooter si cela n'a pas été fait récemment
		If TauxChargeCitrix = "20000" Then
			'Test de la présence du fichier qui contient la dernière heure de reboot par le script.
			If objFSO.FileExists(CheminFichierHeureDernierReboot) Then 'Si fichier present

				Set objFichierTimeStamp = objFSO.OpenTextFile(CheminFichierHeureDernierReboot, ForReading, True)
				'Pour toutes les lignes du fichier
				Do Until objFichierTimeStamp.AtEndOfStream
					MaLigne = objFichierTimeStamp.Readline 'Lecture et affichage de la ligne
					objFichierLog.WriteLine(VbTab & "Contenu ligne de TimeStamp :  " & MaLigne)
					objFichierLog.WriteLine(VbTab & "Is Date :  " & IsDate(MaLigne))
					If IsDate(MaLigne) = True Then
						varInterval = DateDiff("n",MaLigne,now) 'On récupère un interval en minutes
						objFichierLog.WriteLine(VbTab & "varInterval :  " & varInterval)
						
						If varInterval > 120 Then 'Si le dernier reboot remonte à plus de 120 minutes
							'Reboot
							objFichierLog.WriteLine(VbTab & "Lancement du reboot avec  " & Commande)
							Call fctRebooter()
						Else
							objFichierLog.WriteLine(VbTab & "Dernier reboot via le script trop proche. On ne reboot donc pas.")
						End If
					Else 'Si on a récupéré une valeur qui n'est pas une date/heure
						'Dans le doute on reboot
						objFichierLog.WriteLine(VbTab & "Impossible de lire l heure du dernier reboot par script")
						objFichierLog.WriteLine(VbTab & "Lancement du reboot avec  " & Commande)
						Call fctRebooter()
					End If
					
					Exit Do 'On ne regarde que la première ligne
				Loop
				objFichierTimeStamp.Close		
				Set objFichierTimeStamp = Nothing
			
			Else 'Si pas présent alors on reboot direct car cela veut dire qu'on ne l a pas fait
				objFichierLog.WriteLine(VbTab & "Le fichier contenant l heure du dernier reboot n est pas present : " & CheminFichierHeureDernierReboot)
				objFichierLog.WriteLine(VbTab & "Lancement du reboot avec  " & Commande)
				Call fctRebooter()
			End If
		Else
			objFichierLog.WriteLine(VbTab & "Pas de reboot car on n a pas une charge de 20000")
		End If
		
	End If

Loop

Sub fctRebooter()
	Commande = "Shutdown.exe -r -f -t 60 -d p:2:4"
	Set ObjExec02 = WSHShell.Exec(Commande)
	Set ObjExec02 = Nothing

	'On note l'heure de reboot
	Set objFichierTimeStamp = objFSO.OpenTextFile(CheminFichierHeureDernierReboot, ForWritting, True)
	objFichierTimeStamp.WriteLine(Now) 'On ecrit la date et l'heure dans le fichier
	objFichierTimeStamp.Close
	Set objFichierTimeStamp = Nothing
	
End Sub

objFichierLog.WriteLine("Termine")
'Wscript.echo "Exe terminé"

Set ObjExec01 = Nothing
Set WSHShell = Nothing
Lien vers le fichier : cliquez ici Copier le code

Important :


Article(s) précédent(s)

2