Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBS Accès a WMI lent ?!

2 réponses
Avatar
jem
Bonjour à tous,

Nous constatons que sur des accès à WMI, l'exécution du programme prend
beaucoup de temps.
Après quelques tests, nous avons ciblés la ligne d'instruction qui met du
temps a être exécutée.Celle-ci est la suivante :
"For Each objItem In colItems"
Y-a til des moyens pour accélerer cela ?
Qu'en pensez-vous ? Merci
Salutations

Ci dessous le programme que l'on utilise.
strComputer="."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM
Win32_NetworkConnection")
For Each objItem In colItems
name=objItem.Name
SURPCcheminlecteurs=Split(name," ")
SURPClettrerezo=Mid(SURPCcheminlecteurs(1),2,2)
wscript.echo "SURPCcheminlecteurs" & SURPCcheminlecteurs(0)
wscript.echo "SURPClettrerezo" & SURPClettrerezo
Next

2 réponses

Avatar
~Jean-Marc~ [MVP]
Salutations jem, tu nous disais :
Bonjour à tous,

Nous constatons que sur des accès à WMI, l'exécution du programme
prend beaucoup de temps.
Après quelques tests, nous avons ciblés la ligne d'instruction qui
met du temps a être exécutée.Celle-ci est la suivante :
"For Each objItem In colItems"
Y-a til des moyens pour accélerer cela ?
Qu'en pensez-vous ? Merci
Salutations

Ci dessous le programme que l'on utilise.
strComputer="."
Set objWMIService = GetObject("winmgmts:" & strComputer &
"rootCIMV2") Set colItems = objWMIService.ExecQuery("SELECT * FROM
Win32_NetworkConnection")
For Each objItem In colItems
name=objItem.Name
SURPCcheminlecteurs=Split(name," ")
SURPClettrerezo=Mid(SURPCcheminlecteurs(1),2,2)
wscript.echo "SURPCcheminlecteurs" & SURPCcheminlecteurs(0)
wscript.echo "SURPClettrerezo" & SURPClettrerezo
Next


Au feeling, essayez plutôt une requête du style :
objWMIService.ExecQuery("SELECT Name FROM Win32_NetworkConnection")

Vu qu'il n'y a que le nom à traiter, ça risque d'être plus rapide.

@+

--
~Jean-Marc~ MVP Shell/User Fr
- http://msmvps.com/blogs/docxp/ -
- http://docxp.mvps.org -

Avatar
loup

Salutations jem, tu nous disais :
Bonjour à tous,

Nous constatons que sur des accès à WMI, l'exécution du programme
prend beaucoup de temps.
Après quelques tests, nous avons ciblés la ligne d'instruction qui
met du temps a être exécutée.Celle-ci est la suivante :
"For Each objItem In colItems"
Y-a til des moyens pour accélerer cela ?
Qu'en pensez-vous ? Merci
Salutations

Ci dessous le programme que l'on utilise.
strComputer="."
Set objWMIService = GetObject("winmgmts:" & strComputer &
"rootCIMV2") Set colItems = objWMIService.ExecQuery("SELECT * FROM
Win32_NetworkConnection")
For Each objItem In colItems
name=objItem.Name
SURPCcheminlecteurs=Split(name," ")
SURPClettrerezo=Mid(SURPCcheminlecteurs(1),2,2)
wscript.echo "SURPCcheminlecteurs" & SURPCcheminlecteurs(0)
wscript.echo "SURPClettrerezo" & SURPClettrerezo
Next


Au feeling, essayez plutôt une requête du style :
objWMIService.ExecQuery("SELECT Name FROM Win32_NetworkConnection")

Vu qu'il n'y a que le nom à traiter, ça risque d'être plus rapide.

@+

--
~Jean-Marc~ MVP Shell/User Fr
- http://msmvps.com/blogs/docxp/ -
- http://docxp.mvps.org -


Bonjour,

Ok merci du tuyau mais ça ne change quasiment rien.
Je pense que le fait que cela soit long, c'est qu'on liste plusieurs
lecteurs réseaux (entre 5 et 10 sur les postes clients) et que la classe
Win32_NetworkConnection met un peu de temps à les lister.
En faisant un test avec une autre classe (par exemple) Win32_ComputerSystem,
la ligne "For Each objItem In colItems" est exécutée instantanément.
Et si on exécute Win32_NetworkConnection avec 1 seul lecteur réseau c'est
quasi instantané, ce qui confirme les autres tests.
On a essayé aussi sur des machines plus puissantes (3ghz) mais cela ne
change rien et de toute façon le processeur n'est pas utilisé...
La lenteur est-elle dû à l'utilisation de WMI avec VBS car si l'on utilisait
cette même classe Win32_NetworkConnection dans un autre langage, est-ce que
cela serait plus rapide ?
Merci