Option Explicit '2013 12 13 version : add looking for "down" session Dim objFSO, objFichierLog, CheminScriptActuel, CheminFichierdeLog, NomFichier Dim WSHShell, ObjExec01, ObjExec02, PIDMonExe Dim vSystemRoot Dim Commande, UneLigneDeResultat Dim Position, ErreurTrouvee Dim NumeroSession Redim MonTableauDynamiquePourResultat(0) 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" Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFichierLog = objFSO.OpenTextFile(CheminFichierdeLog, ForAppending, True) Set WSHShell = CreateObject("WScript.Shell") vSystemRoot = WSHShell.ExpandEnvironmentStrings("%SystemRoot%") objFichierLog.WriteLine(Now) objFichierLog.WriteLine(VbTab & "vSystemRoot : " & vSystemRoot) 'Commande = vSystemRoot & "\System32\" & "unexe.exe" 'Commande = "cmd.exe /C ""dir c:\""" 'Commande = "query session" Commande = "cmd.exe /C ""query session""" Set ObjExec01 = WSHShell.Exec(Commande) objFichierLog.WriteLine(VbTab & "Commande : " & Commande) PIDMonExe = ObjExec01.ProcessID objFichierLog.WriteLine(VbTab & "PID de l'exe : " & PIDMonExe) Do While Not ObjExec01.StdOut.AtEndOfStream 'On récupère la ligne UneLigneDeResultat = ObjExec01.StdOut.ReadLine() objFichierLog.WriteLine(VbTab & "UneLigneDeResultat : " & UneLigneDeResultat) 'Recheche d une session HS ErreurTrouvee = 0 Position = Instr(1,Lcase(UneLigneDeResultat),"hors service") If Position > 0 Then ErreurTrouvee = 1 Position = Instr(1,Lcase(UneLigneDeResultat),"down") If Position > 0 Then ErreurTrouvee = 1 If ErreurTrouvee > 0 Then objFichierLog.WriteLine(VbTab & "Hors service détecté") UneLigneDeResultat = Trim(UneLigneDeResultat) NumeroSession = Left(UneLigneDeResultat, 5) If IsNumeric(NumeroSession) = True Then 'Commande = "reset session " & NumeroSession Commande = "reset.exe session " & NumeroSession 'Commande = "cmd.exe /C ""reset session " & NumeroSession & """" objFichierLog.WriteLine(VbTab & "Commande : " & Commande) Set ObjExec02 = WSHShell.Exec(Commande) PIDMonExe = ObjExec02.ProcessID objFichierLog.WriteLine(VbTab & "PID de l'exe : " & PIDMonExe) WScript.Sleep 2000 ObjExec02.StdIn.Write "o" ObjExec02.StdIn.Write VbCrLf 'WshShell.AppActivate PIDMonExe 'WScript.Sleep 2000 'WshShell.SendKeys "O" 'WSHShell.SendKeys "{ENTER}" objFichierLog.WriteLine(VbTab & "Envoi de la touche O et Enter fait.") Do While Not ObjExec02.StdOut.AtEndOfStream UneLigneDeResultat = ObjExec02.StdOut.ReadLine() UneLigneDeResultat = Trim(Lcase(UneLigneDeResultat)) objFichierLog.WriteLine(VbTab & ObjExec02.StdOut.ReadLine()) If Left(UneLigneDeResultat, 7) = "ica-tcp" Then objFichierLog.WriteLine(VbTab & "Service ICA de nouveau actif.") End If Loop Set ObjExec02 = Nothing End If End If 'LignesTableauResultat = LignesTableauResultat & UneLigneDeResultat & CHR(1) 'If Len(LignesTableauResultat) > 0 Then 'LignesTableauResultat = Left(LignesTableauResultat, (Len(LignesTableauResultat) - Len(CHR(1)))) 'End If 'WScript.Sleep 1000 'Attente de 1 seconde 'Wscript.echo "Code de sortie : " & ObjExec01.ExitCode 'MonTableauDynamiquePourResultat = Split(LignesTableauResultat, CHR(1)) Loop 'On attend que le programme soit terminé 'Do While ObjExec01.Status = 0 'WScript.Sleep 1000 'Attente de 1 seconde 'Loop objFichierLog.WriteLine("Terminé") 'Wscript.echo "Exe terminé" Set ObjExec01 = Nothing Set WSHShell = Nothing