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

index d'objet

6 réponses
Avatar
Th.A.C
Bonjour,

j'essaye de travailler sur une collection d'objet (liste des lecteurs de
cdrom) directement avec un indice, sans utiliser une boucle 'for each',
mais je n'arrive pas à trouver la syntaxe pour accéder directement au
premier objet. Pour l'instant j'en suis la:

-------------------------------------------
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colItems = objWMIService.ExecQuery("Select * from Win32_CDROMDrive")

wscript.echo "Nombre de lecteurs de cdroms: " & colitems.count
set lecteur = colItems.Item(1)
wscript.echo "1er lecteur: " & lecteur.Drive
-------------------------------------------

merci
Thierry

6 réponses

Avatar
F. Dunoyer [MVP]
Bonjour,

j'essaye de travailler sur une collection d'objet (liste des lecteurs de
cdrom) directement avec un indice, sans utiliser une boucle 'for each', mais
je n'arrive pas à trouver la syntaxe pour accéder directement au premier
objet. Pour l'instant j'en suis la:

-------------------------------------------
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!" & strComputer & "rootcimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_CDROMDrive")
wscript.echo "Nombre de lecteurs de cdroms: " & colitems.count
set lecteur = colItems.Item(1)
wscript.echo "1er lecteur: " & lecteur.Drive
-------------------------------------------
merci
Thierry


Sans être un expert du VB script, il me semble que le principe meme des
collections c'est de ne pouvoir être gérées que par les boucles for
each/next

--
François Dunoyer [MVP Windows Server / Security]
Jours après jours avec Longhorn Server
http://fds.mvps.org/LH/index.htm

Avatar
Th.A.C

Sans être un expert du VB script, il me semble que le principe meme des
collections c'est de ne pouvoir être gérées que par les boucles for
each/next



j'en avais bien peur...
ca va alourdir bien inutilement mon script, tant pis...

merci pour ta réponse :-)

Avatar
Gilles LAURENT
"Th.A.C" a écrit dans le message de
news:%
| Bonjour,

Bonjour,

| j'essaye de travailler sur une collection d'objet (liste des lecteurs
| de cdrom) directement avec un indice, sans utiliser une boucle 'for
| each', mais je n'arrive pas à trouver la syntaxe pour accéder
| directement au premier objet. Pour l'instant j'en suis la:
|
| -------------------------------------------
| strComputer = "."
| Set objWMIService = GetObject("winmgmts:" _
| & "{impersonationLevel=impersonate}!" & strComputer &
| "rootcimv2")
|
| Set colItems = objWMIService.ExecQuery("Select * from
| Win32_CDROMDrive")
|
| wscript.echo "Nombre de lecteurs de cdroms: " & colitems.count
| set lecteur = colItems.Item(1)
| wscript.echo "1er lecteur: " & lecteur.Drive
| -------------------------------------------
|
| merci
| Thierry

WMI n'implémente que l'interface IEnumVariant. De ce fait, pour extraire
un élément d'une collection WMI, il est nécessaire d'utiliser les
boucles For Each / Next. En revanche, si le serveur COM implémente la
propriété Item de l'interface ICollection alors l'extraction d'un
élement d'une collection peut être réalisée via son index. Ci dessous un
exemple avec l'objet Shell.Application :

Set oShApp=CreateObject("Shell.Application")
Set colWindows=oshApp.Windows
WScript.Echo colWindows(0)

--
Gilles LAURENT
http://glsft.free.fr
Avatar
F. Dunoyer [MVP]
Th.A.C avait soumis l'idée :

Sans être un expert du VB script, il me semble que le principe meme des
collections c'est de ne pouvoir être gérées que par les boucles for
each/next



j'en avais bien peur...
ca va alourdir bien inutilement mon script, tant pis...

merci pour ta réponse :-)


A moins que qelqu'un soit espiré ?
Sinon tu peux toujours lire ta collection dans un tableau et utiliser
le tableau pour les acces suivants.

--
François Dunoyer [MVP Windows Server / Security]
Jours après jours avec Longhorn Server
http://fds.mvps.org/LH/index.htm


Avatar
Th.A.C

WMI n'implémente que l'interface IEnumVariant. De ce fait, pour extraire
un élément d'une collection WMI, il est nécessaire d'utiliser les
boucles For Each / Next. En revanche, si le serveur COM implémente la
propriété Item de l'interface ICollection alors l'extraction d'un
élement d'une collection peut être réalisée via son index. Ci dessous un
exemple avec l'objet Shell.Application :

Set oShApp=CreateObject("Shell.Application")
Set colWindows=oshApp.Windows
WScript.Echo colWindows(0)



Merci, je comprend mieux pourquoi ca ne marchait pas :-)

Avatar
Gilles LAURENT
"Th.A.C" a écrit dans le message de
news:%
||
|| WMI n'implémente que l'interface IEnumVariant. De ce fait, pour
|| extraire un élément d'une collection WMI, il est nécessaire
|| d'utiliser les boucles For Each / Next. En revanche, si le serveur
|| COM implémente la propriété Item de l'interface ICollection alors
|| l'extraction d'un élement d'une collection peut être réalisée via
|| son index. Ci dessous un exemple avec l'objet Shell.Application :
||
|| Set oShApp=CreateObject("Shell.Application")
|| Set colWindows=oshApp.Windows
|| WScript.Echo colWindows(0)
||
|
| Merci, je comprend mieux pourquoi ca ne marchait pas :-)

En revanche, avec Vista et Longhorn, cette "limitation" est levée grâce
à l'introduction de la méthode ItemIndex d'une collection WMI
(SWbemObjectSet). Par exemple :

Set oWmi=GetObject("winmgmts:/root/cimv2")
Set colDrives=oWmi.ExecQuery("Select * from Win32_CDRomDrive")
Set oDrive = colDrives.ItemIndex(0)

--
Gilles LAURENT
http://glsft.free.fr