2010-03-04 4 views
8

Je simple vbscript pour récupérer la version Windows:Obtenez premier enregistrement de WMI ExecQuery

Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") 
Set colVersions = objWMI.ExecQuery("Select * from Win32_OperatingSystem") 

For Each objVer in colVersions 
    ver = objVer.Version 
Next 

Est-il possible d'obtenir le premier enregistrement ou dois-je faire une boucle sur tous les enregistrements de la collection. Tous les exemples que j'ai vus sont avec la construction For Each. Je reçois fin d'erreur prévue déclaration lorsque je tente:

ver = colVersions[0].Version 

Il semble que la valeur de retour de ExecQuery n'est pas une collection appropriée.

+0

J'ai essayé différentes façons d'obtenir la première valeur pour un certain temps, mais je ne pouvais pas. Ce n'est en aucun cas une réponse :) – Fionnuala

Répondre

12
For Each objVer in colVersions 
    ver = objVer.Version 
    exit for 
Next 
+0

Wow - comment facile et fonctionne même sur WinXP! –

11

Sous Windows Vista et versions ultérieures, vous pouvez utiliser la méthode ItemIndex pour obtenir un élément de collection par son index:

ver = colVersions.ItemIndex(0).Version 

Sur les versions antérieures de Windows, il n'y a aucun moyen de le faire, j'ai peur.

+0

C'est exactement ce que je cherchais. Merci. –

+3

Attention, cela ne fonctionne pas sous Windows XP! –

+0

@Lukas: En effet, MSDN dit que 'ItemIndex' a été introduit dans Windows Vista. Mise à jour de la réponse – Helen

-1
Set objWMI = GetObject("WinMgmts:{ImpersonationLevel=Impersonate}!\\.\Root\CIMV2") 
Set objOS = objWMI.ExecQuery("SELECT * FROM Win32_OperatingSystem").ItemIndex(0) 

msgBox objOS.Version 

Modifier pour Explication: En ajoutant .ItemIndex (0) à votre requête initiale, vous attrapait le premier élément de la collection. Cela éliminera le besoin d'une boucle For/Each.

+0

Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire expliquant pourquoi et/ou comment ce code répond à la question améliore sa valeur à long terme. –

+0

Cela répète juste la réponse d'Helen (moins la mise en garde de la version). –

+0

Même résultat, finalement, mais plus propre IMO. –

Questions connexes