Introduction
Le script récupère l'ip du client puis essaye de se connecter à sa base de registre pour y récupérer son identifiant TeamViewer V7.
Il faut donc mettre en place un système pour que ce script se déclenche à l'ouverture de session.
Pour que le script puisse se connecter sur la machine du client, il faut que qu'elle soit dans un domaine et que vous ayez les droits nécessaires.
Il faut également que son firewall vous laisse vous connecter à la base de registre.
Lien vers le fichier : cliquez ici
Le script a déclencher au logon
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
Lien vers le fichier : cliquez ici
Article(s) précédent(s)
Article(s) en relation(s)