Option Explicit 'Version du 23 07 2014 'Log dans un fichie l'Id TeamViewer d'une personne qui se connecte sur un serveur Citrix 'Il faut que la machine du client soit dans un domaine et que vous ayez les droits de vous connecter à distance sur la base de registre du client 'Aussi son firewall doit également vous laisser passer. 'Déclencher le script à l'ouverture de session 'Quand la session s'ouvre, le script récupère l'ip du client, essaye de se connecter à la base de registre du client pour récupérer l'identifiant TeamViewer V7 Dim ClientVersion, ClientID, strComputer, objRegistry, PathRepertoireRegistre, NomCleeRegistre, ValeurCleeRegistre Dim objFSO, objTextFile, CheminFichier, CheminScriptActuel, CheminFichierResultat, ScriptFileName, Position Dim WSHShell, vUserName, vSessionName, vCOMPUTERNAME Dim ActualDay, MyDay, MyMonth Dim ClientInfo, ClientIP Dim objWMIService, colItems, objItem 'Déclaration des constantes Const ForReading = 1 Const ForWritting = 2 Const ForAppending = 8 Const HKEY_CLASSES_ROOT = &H80000000 Const HKEY_CURRENT_USER = &H80000001 Const HKEY_LOCAL_MACHINE = &H80000002 Const HKEY_USERS = &H80000003 Const HKEY_CURRENT_CONFIG = &H80000005 Const HKEY_DYN_DATA = &H80000006 MyDay = Day(Now) MyMonth = Month(Now) If Len(MyDay) = 1 Then MyDay = "0" & MyDay If Len(MyMonth) = 1 Then MyMonth = "0" & MyMonth ActualDay = Year(Now) & "-" & MyMonth & "-" & MyDay Set WSHShell = CreateObject("WScript.Shell") vUserName = WSHShell.ExpandEnvironmentStrings("%USERNAME%") vSessionName = WSHShell.ExpandEnvironmentStrings("%SESSIONNAME%") vCOMPUTERNAME = WSHShell.ExpandEnvironmentStrings("%COMPUTERNAME%") Set WSHShell = Nothing CheminScriptActuel = Left(wscript.scriptfullname,Len(wscript.scriptfullname)-Len(wscript.scriptname)-1) ScriptFileName = wscript.scriptname Position = InstrRev(ScriptFileName,".") if (Position > 0) Then ScriptFileName = Left(ScriptFileName, Position - 1) CheminFichierResultat = CheminScriptActuel & "\" & ScriptFileName & "_" & vUserName & "_" & vCOMPUTERNAME & "_Result.txt" Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTextFile = objFSO.OpenTextFile(CheminFichierResultat, ForWritting, True) objTextFile.WriteLine(Now) 'On ecrit la date et l'heure dans le fichier objTextFile.WriteLine("ActualDay : " & ActualDay) objTextFile.WriteLine("vCOMPUTERNAME : " & vCOMPUTERNAME) objTextFile.WriteLine("vUserName : " & vUserName) objTextFile.WriteLine("vSessionName : " & vSessionName) ClientIP = "" If Left(Lcase(vSessionName), 3) = "ica" Then 'Si on est en présence d'une session ICA 'On pointe sur l'ordinateur local strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\Citrix") 'Set colItems = objWMIService.ExecQuery("SELECT * FROM MetaFrame_Session",,48) Set colItems = objWMIService.ExecQuery("SELECT * FROM MetaFrame_Session where SessionName = '" & vSessionName & "'",,48) For Each objItem in colItems ClientInfo = CStr(objItem.Client) If Len(ClientInfo) > 0 Then Position = InStr(Lcase(ClientInfo), "clientaddress=") If Position > 0 Then ClientIP = Mid(ClientInfo, (Position + Len("clientaddress="))) If (Left(ClientIP,1) = Chr(34)) Then ClientIP = Mid(ClientIP, 2) 'Si le premier caractère est ", on le retire If (Right(ClientIP,1) = Chr(34)) Then ClientIP = Left(ClientIP, (Len(ClientIP)-1)) 'Si le dernier caractère est ", on le retire End If Exit For End If Next If Len(ClientIP) > 0 Then objTextFile.WriteLine("ClientIP : " & ClientIP) 'Je fais un objet qui represente la base de registre et j'essaye de me connecter à la machine à distance Err.clear On Error Resume Next Set objRegistry=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & ClientIP & "\root\default:StdRegProv") If Err.Number = 0 Then ClientVersion = "" ClientID = "" 'On va tester la clée 64 Bits PathRepertoireRegistre = "SOFTWARE\Wow6432Node\TeamViewer\Version7" NomCleeRegistre = "ClientID" objRegistry.GetDWORDValue HKEY_LOCAL_MACHINE,PathRepertoireRegistre,NomCleeRegistre,ValeurCleeRegistre 'Wscript.Echo "Valeur de " & PathRepertoireRegistre & "\" & NomCleeRegistre & " : " & ValeurCleeRegistre If Len(ValeurCleeRegistre) > 0 Then ClientID = ValeurCleeRegistre Else PathRepertoireRegistre = "SOFTWARE\TeamViewer\Version7" objRegistry.GetDWORDValue HKEY_LOCAL_MACHINE,PathRepertoireRegistre,NomCleeRegistre,ValeurCleeRegistre 'Wscript.Echo "Valeur de " & PathRepertoireRegistre & "\" & NomCleeRegistre & " : " & ValeurCleeRegistre If Len(ValeurCleeRegistre) > 0 Then ClientID = ValeurCleeRegistre End If 'Si on a réussi à récupérer le client ID on va récupérer la version If Len(ClientID) > 0 Then NomCleeRegistre = "Version" objRegistry.GetStringValue HKEY_LOCAL_MACHINE,PathRepertoireRegistre,NomCleeRegistre,ValeurCleeRegistre 'Wscript.Echo "Valeur de " & PathRepertoireRegistre & "\" & NomCleeRegistre & " : " & ValeurCleeRegistre If Len(ValeurCleeRegistre) > 0 Then ClientVersion = ValeurCleeRegistre objTextFile.WriteLine("ClientID : " & ClientID) objTextFile.WriteLine("ClientVersion : " & ClientVersion) End If Set objRegistry = Nothing Else objTextFile.WriteLine("Impossible de se connecter à : " & ClientIP & " : " & Err.Description) End If End If Else objTextFile.WriteLine("Seul les sessions Citrix sont traitées. Arrêt") End If objTextFile.Close 'Fermeture du fichier Set objTextFile = Nothing Set objFSO = Nothing