2010-03-04 29 views
8

Tôi có một VBScript đơn giản để lấy phiên bản Windows:Nhận ghi đầu tiên từ 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 

là có thể để có được những kỷ lục đầu tiên hoặc tôi phải vòng qua tất cả các bản ghi trong bộ sưu tập. Tất cả các ví dụ tôi đã thấy là với việc xây dựng For Each. Tôi nhận Dự kiến ​​cuối năm tuyên bố lỗi khi tôi thử:

ver = colVersions[0].Version 

Dường như giá trị trả về của ExecQuery không phải là một bộ sưu tập thích hợp.

+0

Tôi đã thử nhiều cách để nhận giá trị đầu tiên trong một thời gian, nhưng không thể. Điều này là do không có nghĩa là một câu trả lời :) – Fionnuala

Trả lời

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

Wow - làm thế nào dễ dàng và làm việc ngay cả trên WinXP! –

11

Trên Windows Vista và sau đó, bạn có thể sử dụng phương pháp ItemIndex để có được một bộ sưu tập item bởi chỉ số của nó:

ver = colVersions.ItemIndex(0).Version 

Trong các phiên bản Windows trước đó, không có cách nào để làm điều này tôi sợ.

+0

Đó là chính xác những gì tôi đang tìm kiếm. Cảm ơn. –

+3

Hãy cẩn thận - điều này không hoạt động trong Windows XP! –

+0

@Lukas: Thật vậy, MSDN nói rằng 'ItemIndex' được giới thiệu trong Windows Vista. Đã cập nhật câu trả lời. – Helen

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

msgBox objOS.Version 

Chỉnh sửa cho Giải thích: Bằng cách thêm .ItemIndex (0) để truy vấn ban đầu của bạn, bạn đang grabbing mục đầu tiên trong bộ sưu tập. Điều này sẽ loại bỏ sự cần thiết cho một vòng lặp For/Each.

+0

Mặc dù mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung về lý do và/hoặc cách mã này trả lời câu hỏi cải thiện giá trị lâu dài của nó. –

+0

Điều đó chỉ lặp lại câu trả lời của Helen (trừ đi bản báo trước). –

+0

Kết quả tương tự, cuối cùng, nhưng IMO sạch hơn. –

Các vấn đề liên quan