TUTOS.EU

Récupérer l'identifiant TeamViewer V7 d'une personne qui se connecte avec Citrix

Sur un serveur Citrix, comment récupérer en VbScript l'identifiant TeamViewer V7 d'une personne qui se connecte

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 Copier le code

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 Copier le code

2