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
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 dinterruption 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 lapplication")
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 quil 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. Cest 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. Cest 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
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
Téléchargement(s)
Nom | Site Web d origine | Description |
---|---|---|
WMICodeCreator.zip | http://www.microsoft.com/en-us... | Explorateur de classes WMI |
Article(s) précédent(s)
Article(s) en relation(s)