2010-03-04 8 views
8

Ho una semplice VBScript per recuperare la versione di Windows:Ottenere primo disco da 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 

È 'possibile ottenere il primo record o devo ciclo su tutti i record della collezione. Tutti gli esempi che ho visto sono con la costruzione For Each. Ricevo Prevista fine della dichiarazione errore quando provo:

ver = colVersions[0].Version 

Sembra che il valore di ritorno di ExecQuery non è una raccolta corretta.

+0

Ho provato vari modi per ottenere il primo valore per un po ', ma non ci sono riuscito. Questa non è affatto una risposta :) – Fionnuala

risposta

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

Wow: quanto è facile e funziona anche su WinXP! –

11

In Windows Vista e versioni successive, è possibile utilizzare il metodo ItemIndex per ottenere una voce della raccolta dal suo indice:

ver = colVersions.ItemIndex(0).Version 

Nelle versioni precedenti di Windows, non c'è modo per fare questo ho paura.

+0

Questo è esattamente quello che stavo cercando. Grazie. –

+3

Fai attenzione - questo non funziona in Windows XP! –

+0

@Lukas: Infatti, MSDN dice che 'ItemIndex' è stato introdotto in Windows Vista. Aggiornata la risposta. – Helen

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

msgBox objOS.Version 

Edit per Spiegazione: Aggiungendo .ItemIndex (0) per la query originale, si sta afferrando il primo elemento della collezione. Ciò eliminerà la necessità di un ciclo For/Each.

+0

Sebbene questo codice possa rispondere alla domanda, fornire un contesto aggiuntivo sul perché e/o su come questo codice risponde alla domanda migliora il suo valore a lungo termine. –

+0

Questo ripete semplicemente la risposta di Helen (meno l'avvertenza sulla versione). –

+0

Lo stesso risultato, in definitiva, ma IMO più pulito. –