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