TUTOS.EU

Script vbs pour extraite la latence des sessions Citrix des serveurs

Vbscript pour interroger via wmi le compteur perfmon de Citrix qui contient la latence des différentes sessions

De base en wmi on peut interroger la valeur des compteurs perfmon, y compris ceux de Citrix.

Exemple à jour directement sur un serveur Citrix

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PerfRawData_CitrixICA_ICASession",,48) 
For Each objItem in colItems 
	Wscript.Echo "-----------------------------------"
	Wscript.Echo "Win32_PerfRawData_CitrixICA_ICASession instance"
	Wscript.Echo "-----------------------------------"
	Wscript.Echo "Caption: " & objItem.Caption
	Wscript.Echo "Description: " & objItem.Description
	Wscript.Echo "Frequency_Object: " & objItem.Frequency_Object
	Wscript.Echo "Frequency_PerfTime: " & objItem.Frequency_PerfTime
	Wscript.Echo "Frequency_Sys100NS: " & objItem.Frequency_Sys100NS
	Wscript.Echo "LatencyLastRecorded: " & objItem.LatencyLastRecorded
	Wscript.Echo "LatencySessionAverage: " & objItem.LatencySessionAverage
	Wscript.Echo "LatencySessionDeviation: " & objItem.LatencySessionDeviation
	Wscript.Echo "Name: " & objItem.Name
	Wscript.Echo "Timestamp_Object: " & objItem.Timestamp_Object
	Wscript.Echo "Timestamp_PerfTime: " & objItem.Timestamp_PerfTime
	Wscript.Echo "Timestamp_Sys100NS: " & objItem.Timestamp_Sys100NS
Next
Lien vers le fichier : cliquez ici Copier le code

On peut facilement récupérer la liste des compteurs à interroger via l'outil WMI code creator disponible en bas de cet article

En partant de ce principe, un script plus complexe a été développé.
Il relève non seulement la latence Citrix mais aussi d'autres compteurs comme la longueur de file d'attente des disques.

Option Explicit

Dim objFSO, objTextFileResultat, objTextFileListe
Dim CheminScriptActuel, CheminFichierBAT, CheminFichierListeMachines, ScriptFileName
Dim Position
Dim NomMachine
Dim objWMIService, colItems, objItem
Dim LigneResultat
Dim varPoolNonpagedBytes, varPoolPagedBytes, varPagesPersec, varPercentCommittedBytesInUse, varFreeSystemPageTableEntries, varCacheBytes
Dim varPercentInterruptTime, varPercentUserTime
Dim varBytesReceivedPersec, varBytesSentPersec

'Déclaration des constantes
Const ForReading = 1
Const ForWritting = 2
Const ForAppending = 8

Const AnalyserSessionsCitrix = 1 'Mettre à 1 si vous voulez analyser les sessions Citrix avec leur latence

ScriptFileName = wscript.scriptname
Position = InstrRev(ScriptFileName,".")
if (Position > 0) Then ScriptFileName = Left(ScriptFileName, Position - 1)

CheminFichierBAT = ScriptFileName & "_Resultat.txt"
CheminFichierListeMachines = ScriptFileName & "_ListeMachines.txt"

CheminScriptActuel = Left(wscript.scriptfullname,Len(wscript.scriptfullname)-Len(wscript.scriptname)-1)
CheminFichierBAT = CheminScriptActuel & "\" & CheminFichierBAT
CheminFichierListeMachines = CheminScriptActuel & "\" & CheminFichierListeMachines

If (Len(CheminFichierBAT) > 0) And (Len(CheminFichierListeMachines) > 0) Then

	Set objFSO = CreateObject("Scripting.FileSystemObject")
	
	If objFSO.FileExists(CheminFichierListeMachines) Then 'Si le fichier qui contient la liste des machines existe
		Set objTextFileResultat = objFSO.OpenTextFile(CheminFichierBAT, ForWritting, True)
		
		If AnalyserSessionsCitrix = 1 Then
			Set objTextFileListe = objFSO.OpenTextFile(CheminFichierListeMachines, ForReading, True)

			'Ecriture de l'entête des colonnes :
			objTextFileResultat.WriteLine("NomMachine" & VbTab & "Name" & VbTab & "Date&Heure" & VbTab & "LatencyLastRecorded" & VbTab & "LatencySessionAverage")
			
			Do Until objTextFileListe.AtEndOfStream
				NomMachine = objTextFileListe.Readline 'Lecture et affichage de la ligne
				'Wscript.Echo "Traitement de " & NomMachine
				LigneResultat = ""
				
				On Error Resume Next
				Err.Clear
				Set objWMIService = GetObject("winmgmts:\\" & NomMachine & "\root\CIMV2")		
				'Wscript.Echo Err.Number & " - " & Err.Description
				If Err.Number = 0 Then
					Err.Clear
					Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PerfRawData_CitrixICA_ICASession",,48)
					'Wscript.Echo Err.Number & " - " & Err.Description
					'objTextFileResultat.WriteLine(LigneResultat)
						'Wscript.Echo "Caption: " & objItem.Caption
						'Wscript.Echo "Description: " & objItem.Description
						'Wscript.Echo Err.Number & " - " & Err.Description
						
					For Each objItem in colItems
						LigneResultat = NomMachine
						LigneResultat = LigneResultat & VbTab & objItem.Name & VbTab & Now & VbTab & objItem.LatencyLastRecorded & VbTab & objItem.LatencySessionAverage
						objTextFileResultat.WriteLine(LigneResultat)
					Next

					If 1 = 2 Then
						
						Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PerfRawData_CitrixICA_ICASession",,48) 
						For Each objItem in colItems 
							Wscript.Echo "-----------------------------------"
							Wscript.Echo "Win32_PerfRawData_CitrixICA_ICASession instance"
							Wscript.Echo "-----------------------------------"
							Wscript.Echo "Caption: " & objItem.Caption
							Wscript.Echo "Description: " & objItem.Description
							Wscript.Echo "Frequency_Object: " & objItem.Frequency_Object
							Wscript.Echo "Frequency_PerfTime: " & objItem.Frequency_PerfTime
							Wscript.Echo "Frequency_Sys100NS: " & objItem.Frequency_Sys100NS
							Wscript.Echo "LatencyLastRecorded: " & objItem.LatencyLastRecorded
							Wscript.Echo "LatencySessionAverage: " & objItem.LatencySessionAverage
							Wscript.Echo "LatencySessionDeviation: " & objItem.LatencySessionDeviation
							Wscript.Echo "Name: " & objItem.Name
							Wscript.Echo "Timestamp_Object: " & objItem.Timestamp_Object
							Wscript.Echo "Timestamp_PerfTime: " & objItem.Timestamp_PerfTime
							Wscript.Echo "Timestamp_Sys100NS: " & objItem.Timestamp_Sys100NS
						Next
					End If
				Else
					Wscript.Echo VbTab & "Erreur pour joindre " & NomMachine
					LigneResultat = NomMachine & VbTab & "Erreur pour joindre la machine"
					objTextFileResultat.WriteLine(LigneResultat)
				End If
			
				Set colItems = Nothing
				Set objWMIService = Nothing		
				
			Loop

			'Analyse des compteurs de performance des disques
			'Ecriture de l'entête des colonnes :
			objTextFileResultat.WriteLine("")
			objTextFileResultat.WriteLine("NomMachine" & VbTab & "Name" & VbTab & "Date&Heure" & VbTab & "AvgDiskWriteQueueLength")
			
			objTextFileListe.Close
			Set objTextFileListe = Nothing
		End If

		Set objTextFileListe = objFSO.OpenTextFile(CheminFichierListeMachines, ForReading, True)
		Do Until objTextFileListe.AtEndOfStream
			NomMachine = objTextFileListe.Readline 'Lecture et affichage de la ligne
			'Wscript.Echo "Traitement de " & NomMachine
			LigneResultat = ""
			
			On Error Resume Next
			Err.Clear
			Set objWMIService = GetObject("winmgmts:\\" & NomMachine & "\root\CIMV2")		
			'Wscript.Echo Err.Number & " - " & Err.Description
			If Err.Number = 0 Then
				Err.Clear
				Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PerfFormattedData_PerfDisk_LogicalDisk",,48)
					
				For Each objItem in colItems
					LigneResultat = NomMachine
					LigneResultat = LigneResultat & VbTab & objItem.Name & VbTab & Now & VbTab & objItem.AvgDiskWriteQueueLength
					objTextFileResultat.WriteLine(LigneResultat)
				Next
			Else
				Wscript.Echo VbTab & "Erreur pour joindre " & NomMachine
				LigneResultat = NomMachine & VbTab & "Erreur pour joindre la machine"
				objTextFileResultat.WriteLine(LigneResultat)
			End If
		
			Set colItems = Nothing
			Set objWMIService = Nothing		
			
		Loop

		'Analyse des compteurs pour le cpu
		'Ecriture de l'entête des colonnes :
		objTextFileResultat.WriteLine("")
		objTextFileResultat.WriteLine("-----------------------------------")
		objTextFileResultat.WriteLine("Analyse des compteurs pour le cpu")
		objTextFileResultat.WriteLine("-----------------------------------")
		objTextFileResultat.WriteLine("")
		objTextFileResultat.WriteLine("PercentInterruptTime : Mesure le temps processeur passé à gérer des demandes d’interruption hardware. Si plus de 15%, il y a un problème hardware.")
		objTextFileResultat.WriteLine("PercentUserTime : Pourcentage du temps processeur passé en mode utilisateur. La valeur doit rester faible. Dans le cas contraire, il faut optimiser l’application")
		objTextFileResultat.WriteLine("")

		objTextFileResultat.WriteLine("NomMachine" & VbTab & "Name" & VbTab & "Date&Heure" & VbTab & "PercentProcessorTime" & VbTab & "PercentInterruptTime" & VbTab & "PercentUserTime")
		
		objTextFileListe.Close
		Set objTextFileListe = Nothing
		Set objTextFileListe = objFSO.OpenTextFile(CheminFichierListeMachines, ForReading, True)
		Do Until objTextFileListe.AtEndOfStream
			NomMachine = objTextFileListe.Readline 'Lecture et affichage de la ligne
			'Wscript.Echo "Traitement de " & NomMachine
			LigneResultat = ""
			
			On Error Resume Next
			Err.Clear
			Set objWMIService = GetObject("winmgmts:\\" & NomMachine & "\root\CIMV2")		
			'Wscript.Echo Err.Number & " - " & Err.Description
			If Err.Number = 0 Then
				Err.Clear
				Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PerfFormattedData_PerfOS_Processor",,48)
					
				For Each objItem in colItems
				
					varPercentInterruptTime = objItem.PercentInterruptTime
					If varPercentInterruptTime > 15 Then varPercentInterruptTime = varPercentInterruptTime & " (PB)"

					varPercentUserTime = objItem.PercentUserTime
					If varPercentUserTime > 15 Then varPercentUserTime = varPercentUserTime & " (PB ?)"
					
					LigneResultat = NomMachine
					LigneResultat = LigneResultat & VbTab & objItem.Name & VbTab & Now & VbTab & objItem.PercentProcessorTime & VbTab & varPercentInterruptTime & VbTab & varPercentUserTime
					objTextFileResultat.WriteLine(LigneResultat)
				Next
			Else
				Wscript.Echo VbTab & "Erreur pour joindre " & NomMachine
				LigneResultat = NomMachine & VbTab & "Erreur pour joindre la machine"
				objTextFileResultat.WriteLine(LigneResultat)
			End If
		
			Set colItems = Nothing
			Set objWMIService = Nothing		
			
		Loop
		
		'Analyse des compteurs de mémoire vive
		'Ecriture de l'entête des colonnes :
		objTextFileResultat.WriteLine("")
		objTextFileResultat.WriteLine("-----------------------------------")
		objTextFileResultat.WriteLine("Analyse des compteurs pour la mémoire vive")
		objTextFileResultat.WriteLine("-----------------------------------")
		objTextFileResultat.WriteLine("")
		
		objTextFileResultat.WriteLine("PagesPersec : Mesure le nombre d’échanges qu’il y a entre la mémoire vive et le disque dur (mémoire virtuelle). Ne doit pas dépasser 1000 sur de longues périodes.")
		objTextFileResultat.WriteLine("PercentCommittedBytesInUse : manque de memoire si superieur a 80%")
		objTextFileResultat.WriteLine("PoolNonpagedBytes : Mesure la taille de la mémoire non paginée. C’est une zone mémoire système pour les objets qui ne peuvent être écrit sur le disque dur et doivent donc rester en mémoire vive. Ne doit pas dépasser 175Mb")
		objTextFileResultat.WriteLine("PoolPagedBytes : Mesure la taille de la mémoire paginée. C’est une zone mémoire système pour les objets qui peuvent être écrit sur le disque dur quand ils ne sont pas utilisés. Ne doit pas dépasser 250Mb")
		objTextFileResultat.WriteLine("FreeSystemPageTableEntries : Nombre de page table entries non utilisé par le système. Il y a une faiblesse mémoire si on est en dessous de 5000")
		objTextFileResultat.WriteLine("CacheBytes : Ne doit pas dépasser 300Mb. Indique la mémoire utilisée pour le file system cache.")
		
		objTextFileResultat.WriteLine("")
		objTextFileResultat.WriteLine("NomMachine" & VbTab & "Name" & VbTab & "Date&Heure" & VbTab & "AvailableMBytes"  & VbTab &  "PagesPersec" & VbTab & "PercentCommittedBytesInUse" & VbTab & "FreeSystemPageTableEntries" & VbTab & "PoolNonpagedBytes" & VbTab & "PoolPagedBytes" & VbTab & "CacheBytes")

		objTextFileListe.Close
		Set objTextFileListe = Nothing
		Set objTextFileListe = objFSO.OpenTextFile(CheminFichierListeMachines, ForReading, True)
		Do Until objTextFileListe.AtEndOfStream
			NomMachine = objTextFileListe.Readline 'Lecture et affichage de la ligne
			'Wscript.Echo "Traitement de " & NomMachine
			LigneResultat = ""
			
			On Error Resume Next
			Err.Clear
			Set objWMIService = GetObject("winmgmts:\\" & NomMachine & "\root\CIMV2")		
			'Wscript.Echo Err.Number & " - " & Err.Description
			If Err.Number = 0 Then
				Err.Clear
				Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PerfFormattedData_PerfOS_Memory",,48)
					
				For Each objItem in colItems
				
					varPagesPersec = objItem.PagesPersec
					If varPagesPersec > 1000 Then varPagesPersec = varPagesPersec & " (PB si longtemps)"
				
					varPoolNonpagedBytes = Round((objItem.PoolNonpagedBytes)/1024/1024,0)
					If varPoolNonpagedBytes > 175 Then varPoolNonpagedBytes = varPoolNonpagedBytes & " (PB)"
					
					varPoolPagedBytes = Round((objItem.PoolPagedBytes)/1024/1024,0)
					If varPoolPagedBytes > 250 Then varPoolPagedBytes = varPoolPagedBytes & " (PB)"
					
					varPercentCommittedBytesInUse = objItem.PercentCommittedBytesInUse
					If varPercentCommittedBytesInUse >= 80 Then varPercentCommittedBytesInUse = varPercentCommittedBytesInUse & " (PB)"

					varFreeSystemPageTableEntries = objItem.FreeSystemPageTableEntries
					If varFreeSystemPageTableEntries < 5000 Then varFreeSystemPageTableEntries = varFreeSystemPageTableEntries & " (PB)"
				
					varCacheBytes = Round((objItem.CacheBytes)/1024/1024,0)
					If varCacheBytes > 300 Then varCacheBytes = varCacheBytes & " (PB)"
					
					LigneResultat = NomMachine
					LigneResultat = LigneResultat & VbTab & objItem.Name & VbTab & Now & VbTab & objItem.AvailableMBytes & VbTab & objItem.PagesPersec & VbTab & varPercentCommittedBytesInUse & VbTab & varFreeSystemPageTableEntries & VbTab & varPoolNonpagedBytes & VbTab & varPoolPagedBytes & VbTab & varCacheBytes
					objTextFileResultat.WriteLine(LigneResultat)
				Next
			Else
				Wscript.Echo VbTab & "Erreur pour joindre " & NomMachine
				LigneResultat = NomMachine & VbTab & "Erreur pour joindre la machine"
				objTextFileResultat.WriteLine(LigneResultat)
			End If
		
			Set colItems = Nothing
			Set objWMIService = Nothing		
			
		Loop

		'Analyse des compteurs pour le réseau
		'Ecriture de l'entête des colonnes :
		objTextFileResultat.WriteLine("")
		objTextFileResultat.WriteLine("-----------------------------------")
		objTextFileResultat.WriteLine("Analyse des compteurs pour le réseau")
		objTextFileResultat.WriteLine("-----------------------------------")
		objTextFileResultat.WriteLine("")

		objTextFileResultat.WriteLine("NomMachine" & VbTab & "Name" & VbTab & "Date&Heure" & VbTab & "BytesReceivedPersec (en Mb)" & VbTab & "BytesSentPersec (en Mb)" & VbTab & "OutputQueueLength" & VbTab & "PacketsReceivedErrors" & VbTab & "PacketsOutboundErrors" & VbTab & "PacketsOutboundDiscarded" & VbTab & "PacketsReceivedUnknown")

		objTextFileListe.Close
		Set objTextFileListe = Nothing
		Set objTextFileListe = objFSO.OpenTextFile(CheminFichierListeMachines, ForReading, True)
		Do Until objTextFileListe.AtEndOfStream
			NomMachine = objTextFileListe.Readline 'Lecture et affichage de la ligne
			'Wscript.Echo "Traitement de " & NomMachine
			LigneResultat = ""
			
			On Error Resume Next
			Err.Clear
			Set objWMIService = GetObject("winmgmts:\\" & NomMachine & "\root\CIMV2")		
			'Wscript.Echo Err.Number & " - " & Err.Description
			If Err.Number = 0 Then
				Err.Clear
				Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PerfFormattedData_Tcpip_NetworkInterface",,48)
					
				For Each objItem in colItems
				
					varBytesReceivedPersec = Round((objItem.BytesReceivedPersec)/1024/1024,3)
					varBytesSentPersec = Round((objItem.BytesSentPersec)/1024/1024,3)

					LigneResultat = NomMachine

					LigneResultat = LigneResultat & VbTab & objItem.Name & VbTab & Now & VbTab & varBytesReceivedPersec & VbTab & varBytesSentPersec & VbTab & objItem.OutputQueueLength & VbTab & objItem.PacketsReceivedErrors & VbTab & objItem.PacketsOutboundErrors & VbTab & objItem.PacketsOutboundDiscarded & VbTab & objItem.PacketsReceivedUnknown
					objTextFileResultat.WriteLine(LigneResultat)
				Next
			Else
				Wscript.Echo VbTab & "Erreur pour joindre " & NomMachine
				LigneResultat = NomMachine & VbTab & "Erreur pour joindre la machine"
				objTextFileResultat.WriteLine(LigneResultat)
			End If
		
			Set colItems = Nothing
			Set objWMIService = Nothing		
			
		Loop
		
		objTextFileResultat.Close 'Fermeture du fichier
		objTextFileListe.Close

		Set objTextFileResultat = Nothing
		Set objTextFileListe = Nothing
	Else
		Wscript.echo "Le fichier '" & CheminFichierListeMachines & "' n'existe pas"
		Set objTextFileListe = objFSO.OpenTextFile(CheminFichierListeMachines, ForWritting, True)
		objTextFileListe.Close 'Fermeture du fichier
		Set objTextFileListe = Nothing
	End If

	Set objFSO = Nothing

Else
	Wscript.echo "Operation annulee"
End If 'CheminFichierBAT



'"Win32_PerfFormattedData_PerfDisk_LogicalDisk instance"
'"-----------------------------------"
'"AvgDiskBytesPerRead: " & objItem.AvgDiskBytesPerRead
'"AvgDiskBytesPerTransfer: " & objItem.AvgDiskBytesPerTransfer
'"AvgDiskBytesPerWrite: " & objItem.AvgDiskBytesPerWrite
'"AvgDiskQueueLength: " & objItem.AvgDiskQueueLength
'"AvgDiskReadQueueLength: " & objItem.AvgDiskReadQueueLength
'"AvgDisksecPerRead: " & objItem.AvgDisksecPerRead
'"AvgDisksecPerTransfer: " & objItem.AvgDisksecPerTransfer
'"AvgDisksecPerWrite: " & objItem.AvgDisksecPerWrite
'"AvgDiskWriteQueueLength: " & objItem.AvgDiskWriteQueueLength
'"Caption: " & objItem.Caption
'"CurrentDiskQueueLength: " & objItem.CurrentDiskQueueLength
'"Description: " & objItem.Description
'"DiskBytesPersec: " & objItem.DiskBytesPersec
'"DiskReadBytesPersec: " & objItem.DiskReadBytesPersec
'"DiskReadsPersec: " & objItem.DiskReadsPersec
'"DiskTransfersPersec: " & objItem.DiskTransfersPersec
'"DiskWriteBytesPersec: " & objItem.DiskWriteBytesPersec
'"DiskWritesPersec: " & objItem.DiskWritesPersec
'"FreeMegabytes: " & objItem.FreeMegabytes
'"Frequency_Object: " & objItem.Frequency_Object
'"Frequency_PerfTime: " & objItem.Frequency_PerfTime
'"Frequency_Sys100NS: " & objItem.Frequency_Sys100NS
'"Name: " & objItem.Name
'"PercentDiskReadTime: " & objItem.PercentDiskReadTime
'"PercentDiskTime: " & objItem.PercentDiskTime
'"PercentDiskWriteTime: " & objItem.PercentDiskWriteTime
'"PercentFreeSpace: " & objItem.PercentFreeSpace
'"PercentIdleTime: " & objItem.PercentIdleTime
'"SplitIOPerSec: " & objItem.SplitIOPerSec
'"Timestamp_Object: " & objItem.Timestamp_Object
'"Timestamp_PerfTime: " & objItem.Timestamp_PerfTime
'"Timestamp_Sys100NS: " & objItem.Timestamp_Sys100NS

'"-----------------------------------"
'"Win32_PerfFormattedData_PerfOS_Memory instance"
'"-----------------------------------"
'"AvailableBytes: " & objItem.AvailableBytes
'"AvailableKBytes: " & objItem.AvailableKBytes
'"AvailableMBytes: " & objItem.AvailableMBytes
'"CacheBytes: " & objItem.CacheBytes
'"CacheBytesPeak: " & objItem.CacheBytesPeak
'"CacheFaultsPersec: " & objItem.CacheFaultsPersec
'"Caption: " & objItem.Caption
'"CommitLimit: " & objItem.CommitLimit
'"CommittedBytes: " & objItem.CommittedBytes
'"DemandZeroFaultsPersec: " & objItem.DemandZeroFaultsPersec
'"Description: " & objItem.Description
'"FreeAndZeroPageListBytes: " & objItem.FreeAndZeroPageListBytes
'"FreeSystemPageTableEntries: " & objItem.FreeSystemPageTableEntries
'"Frequency_Object: " & objItem.Frequency_Object
'"Frequency_PerfTime: " & objItem.Frequency_PerfTime
'"Frequency_Sys100NS: " & objItem.Frequency_Sys100NS
'"ModifiedPageListBytes: " & objItem.ModifiedPageListBytes
'"Name: " & objItem.Name
'"PageFaultsPersec: " & objItem.PageFaultsPersec
'"PageReadsPersec: " & objItem.PageReadsPersec
'"PagesInputPersec: " & objItem.PagesInputPersec
'"PagesOutputPersec: " & objItem.PagesOutputPersec
'"PagesPersec: " & objItem.PagesPersec
'"PageWritesPersec: " & objItem.PageWritesPersec
'"PercentCommittedBytesInUse: " & objItem.PercentCommittedBytesInUse
'"PoolNonpagedAllocs: " & objItem.PoolNonpagedAllocs
'"PoolNonpagedBytes: " & objItem.PoolNonpagedBytes
'"PoolPagedAllocs: " & objItem.PoolPagedAllocs
'"PoolPagedBytes: " & objItem.PoolPagedBytes
'"PoolPagedResidentBytes: " & objItem.PoolPagedResidentBytes
'"StandbyCacheCoreBytes: " & objItem.StandbyCacheCoreBytes
'"StandbyCacheNormalPriorityBytes: " & objItem.StandbyCacheNormalPriorityBytes
'"StandbyCacheReserveBytes: " & objItem.StandbyCacheReserveBytes
'"SystemCacheResidentBytes: " & objItem.SystemCacheResidentBytes
'"SystemCodeResidentBytes: " & objItem.SystemCodeResidentBytes
'"SystemCodeTotalBytes: " & objItem.SystemCodeTotalBytes
'"SystemDriverResidentBytes: " & objItem.SystemDriverResidentBytes
'"SystemDriverTotalBytes: " & objItem.SystemDriverTotalBytes
'"Timestamp_Object: " & objItem.Timestamp_Object
'"Timestamp_PerfTime: " & objItem.Timestamp_PerfTime
'"Timestamp_Sys100NS: " & objItem.Timestamp_Sys100NS
'"TransitionFaultsPersec: " & objItem.TransitionFaultsPersec
'"TransitionPagesRePurposedPersec: " & objItem.TransitionPagesRePurposedPersec
'"WriteCopiesPersec: " & objItem.WriteCopiesPersec

'"-----------------------------------"
'"Win32_PerfFormattedData_PerfOS_Processor instance"
'"-----------------------------------"
'"C1TransitionsPersec: " & objItem.C1TransitionsPersec
'"C2TransitionsPersec: " & objItem.C2TransitionsPersec
'"C3TransitionsPersec: " & objItem.C3TransitionsPersec
'"Caption: " & objItem.Caption
'"Description: " & objItem.Description
'"DPCRate: " & objItem.DPCRate
'"DPCsQueuedPersec: " & objItem.DPCsQueuedPersec
'"Frequency_Object: " & objItem.Frequency_Object
'"Frequency_PerfTime: " & objItem.Frequency_PerfTime
'"Frequency_Sys100NS: " & objItem.Frequency_Sys100NS
'"InterruptsPersec: " & objItem.InterruptsPersec
'"Name: " & objItem.Name
'"PercentC1Time: " & objItem.PercentC1Time
'"PercentC2Time: " & objItem.PercentC2Time
'"PercentC3Time: " & objItem.PercentC3Time
'"PercentDPCTime: " & objItem.PercentDPCTime
'"PercentIdleTime: " & objItem.PercentIdleTime
'"PercentInterruptTime: " & objItem.PercentInterruptTime
'"PercentPrivilegedTime: " & objItem.PercentPrivilegedTime
'"PercentProcessorTime: " & objItem.PercentProcessorTime
'"PercentUserTime: " & objItem.PercentUserTime
'"Timestamp_Object: " & objItem.Timestamp_Object
'"Timestamp_PerfTime: " & objItem.Timestamp_PerfTime
'"Timestamp_Sys100NS: " & objItem.Timestamp_Sys100NS

'"-----------------------------------"
'"Win32_PerfFormattedData_Tcpip_NetworkInterface instance"
'"-----------------------------------"
'"BytesReceivedPersec: " & objItem.BytesReceivedPersec
'"BytesSentPersec: " & objItem.BytesSentPersec
'"BytesTotalPersec: " & objItem.BytesTotalPersec
'"Caption: " & objItem.Caption
'"CurrentBandwidth: " & objItem.CurrentBandwidth
'"Description: " & objItem.Description
'"Frequency_Object: " & objItem.Frequency_Object
'"Frequency_PerfTime: " & objItem.Frequency_PerfTime
'"Frequency_Sys100NS: " & objItem.Frequency_Sys100NS
'"Name: " & objItem.Name
'"OffloadedConnections: " & objItem.OffloadedConnections
'"OutputQueueLength: " & objItem.OutputQueueLength
'"PacketsOutboundDiscarded: " & objItem.PacketsOutboundDiscarded
'"PacketsOutboundErrors: " & objItem.PacketsOutboundErrors
'"PacketsPersec: " & objItem.PacketsPersec
'"PacketsReceivedDiscarded: " & objItem.PacketsReceivedDiscarded
'"PacketsReceivedErrors: " & objItem.PacketsReceivedErrors
'"PacketsReceivedNonUnicastPersec: " & objItem.PacketsReceivedNonUnicastPersec
'"PacketsReceivedPersec: " & objItem.PacketsReceivedPersec
'"PacketsReceivedUnicastPersec: " & objItem.PacketsReceivedUnicastPersec
'"PacketsReceivedUnknown: " & objItem.PacketsReceivedUnknown
'"PacketsSentNonUnicastPersec: " & objItem.PacketsSentNonUnicastPersec
'"PacketsSentPersec: " & objItem.PacketsSentPersec
'"PacketsSentUnicastPersec: " & objItem.PacketsSentUnicastPersec
'"Timestamp_Object: " & objItem.Timestamp_Object
'"Timestamp_PerfTime: " & objItem.Timestamp_PerfTime
'"Timestamp_Sys100NS: " & objItem.Timestamp_Sys100NS
Lien vers le fichier : cliquez ici Copier le code

Double cliquez dessus pour l'exécuter

Un fichier texte avec le suffixe _ListeMachines apparait

Entrez le nom de vos serveurs Citrix dans le fichier et enregistrez le

Relancez le script.
Un fichier avec le suffixe _Resultat va apparaitre.
Attendez que le script se termine

Ouvrez le fichier avec suffixe _Resultat
collez le contenu dans excel ou autre
Regardez le résultat

Si dessous un script qui lui ne relève que la latence des sessions Citrix

Option Explicit

Dim objFSO, objTextFileResultat, objTextFileListe
Dim CheminScriptActuel, CheminFichierBAT, CheminFichierListeMachines, ScriptFileName
Dim Position
Dim NomMachine
Dim objWMIService, colItems, objItem
Dim LigneResultat

'Déclaration des constantes
Const ForReading = 1
Const ForWritting = 2
Const ForAppending = 8

ScriptFileName = wscript.scriptname
Position = InstrRev(ScriptFileName,".")
if (Position > 0) Then ScriptFileName = Left(ScriptFileName, Position - 1)

CheminFichierBAT = ScriptFileName & "_Resultat.txt"
CheminFichierListeMachines = ScriptFileName & "_ListeMachines.txt"

CheminScriptActuel = Left(wscript.scriptfullname,Len(wscript.scriptfullname)-Len(wscript.scriptname)-1)
CheminFichierBAT = CheminScriptActuel & "\" & CheminFichierBAT
CheminFichierListeMachines = CheminScriptActuel & "\" & CheminFichierListeMachines

If (Len(CheminFichierBAT) > 0) And (Len(CheminFichierListeMachines) > 0) Then

	Set objFSO = CreateObject("Scripting.FileSystemObject")
	
	If objFSO.FileExists(CheminFichierListeMachines) Then 'Si le fichier qui contient la liste des machines existe

		Set objTextFileListe = objFSO.OpenTextFile(CheminFichierListeMachines, ForReading, True)
		Set objTextFileResultat = objFSO.OpenTextFile(CheminFichierBAT, ForWritting, True)
		
		'Ecriture de l'entête des colonnes :
		objTextFileResultat.WriteLine("NomMachine" & VbTab & "Name" & VbTab & "Date&Heure" & VbTab & "LatencyLastRecorded" & VbTab & "LatencySessionAverage")
		
		Do Until objTextFileListe.AtEndOfStream
			NomMachine = objTextFileListe.Readline 'Lecture et affichage de la ligne
			'Wscript.Echo "Traitement de " & NomMachine
			LigneResultat = ""
			
			On Error Resume Next
			Err.Clear
			Set objWMIService = GetObject("winmgmts:\\" & NomMachine & "\root\CIMV2")		
			'Wscript.Echo Err.Number & " - " & Err.Description
			If Err.Number = 0 Then
				Err.Clear
				Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PerfRawData_CitrixICA_ICASession",,48)
				'Wscript.Echo Err.Number & " - " & Err.Description
				'objTextFileResultat.WriteLine(LigneResultat)
					'Wscript.Echo "Caption: " & objItem.Caption
					'Wscript.Echo "Description: " & objItem.Description
					'Wscript.Echo Err.Number & " - " & Err.Description
					
				For Each objItem in colItems
					LigneResultat = NomMachine
					LigneResultat = LigneResultat & VbTab & objItem.Name & VbTab & Now & VbTab & objItem.LatencyLastRecorded & VbTab & objItem.LatencySessionAverage
					objTextFileResultat.WriteLine(LigneResultat)
				Next

				If 1 = 2 Then
					
					Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PerfRawData_CitrixICA_ICASession",,48) 
					For Each objItem in colItems 
						Wscript.Echo "-----------------------------------"
						Wscript.Echo "Win32_PerfRawData_CitrixICA_ICASession instance"
						Wscript.Echo "-----------------------------------"
						Wscript.Echo "Caption: " & objItem.Caption
						Wscript.Echo "Description: " & objItem.Description
						Wscript.Echo "Frequency_Object: " & objItem.Frequency_Object
						Wscript.Echo "Frequency_PerfTime: " & objItem.Frequency_PerfTime
						Wscript.Echo "Frequency_Sys100NS: " & objItem.Frequency_Sys100NS
						Wscript.Echo "LatencyLastRecorded: " & objItem.LatencyLastRecorded
						Wscript.Echo "LatencySessionAverage: " & objItem.LatencySessionAverage
						Wscript.Echo "LatencySessionDeviation: " & objItem.LatencySessionDeviation
						Wscript.Echo "Name: " & objItem.Name
						Wscript.Echo "Timestamp_Object: " & objItem.Timestamp_Object
						Wscript.Echo "Timestamp_PerfTime: " & objItem.Timestamp_PerfTime
						Wscript.Echo "Timestamp_Sys100NS: " & objItem.Timestamp_Sys100NS
					Next
				End If
			Else
				Wscript.Echo VbTab & "Erreur pour joindre " & NomMachine
				LigneResultat = NomMachine & VbTab & "Erreur pour joindre la machine"
				objTextFileResultat.WriteLine(LigneResultat)
			End If
		
			Set colItems = Nothing
			Set objWMIService = Nothing		
			
		Loop
		
		objTextFileResultat.Close 'Fermeture du fichier
		objTextFileListe.Close

		Set objTextFileResultat = Nothing
		Set objTextFileListe = Nothing
	Else
		Wscript.echo "Le fichier '" & CheminFichierListeMachines & "' n'existe pas"
		Set objTextFileListe = objFSO.OpenTextFile(CheminFichierListeMachines, ForWritting, True)
		objTextFileListe.Close 'Fermeture du fichier
		Set objTextFileListe = Nothing
	End If

	Set objFSO = Nothing

Else
	Wscript.echo "Operation annulee"
End If 'CheminFichierBAT
Lien vers le fichier : cliquez ici Copier le code

Téléchargement(s)

NomSite Web d origineDescription
WMICodeCreator.zip http://www.microsoft.com/en-us... Explorateur de classes WMI


2