2010-08-19 12 views
20

Tôi tìm thấy mã trên mạng và đã cố gắng tìm thêm thông tin về mo [].Cách đọc Bộ sưu tập ManagementObject trong WMI bằng C#

Tôi đang cố gắng lấy tất cả thông tin có trong ManagementObjectCollection.

Vì tham số trong mo đang tìm giá trị chuỗi mà tôi không biết, làm cách nào tôi có thể nhận được tất cả các giá trị mà không biết giá trị tham số của nó. Hoặc nếu tôi muốn có được tất cả các giá trị liên quan đến indexer mo trong ManagementObjectCollection

ManagementObjectSearcher objOSDetails = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem"); 
ManagementObjectCollection osDetailsCollection = objOSDetails.Get(); 

foreach(ManagementObject mo in osDetailsCollection) 
{ 
    _osName = mo["name"].ToString();// what other fields are there other than name 
    _osVesion = mo["version"].ToString(); 
    _loginName = mo["csname"].ToString(); 
} 

Trả lời

36

Hãy nhìn vào truy vấn WMI của bạn:

SELECT * FROM Win32_OperatingSystem 

Nó có nghĩa là "có được tất cả các trường của lớp Win32_OperatingSystem và bao gồm tất cả các thuộc tính của lớp". Đây là một đầu mối mà kết quả là ManagementObject s là trình bao bọc trên lớp WMI Win32_OperatingSystem. Xem class description để tìm hiểu thuộc tính của nó, ý nghĩa của chúng và quyết định cái nào bạn thực sự cần sử dụng trong mã của bạn.

Nếu bạn cần lặp qua tất cả các thuộc tính có sẵn mà không cần phải mã hóa tên của chúng, hãy sử dụng thuộc tính Properties như là Giorgi suggested. Dưới đây là ví dụ:

foreach (ManagementObject mo in osDetailsCollection) 
{ 
    foreach (PropertyData prop in mo.Properties) 
    { 
     Console.WriteLine("{0}: {1}", prop.Name, prop.Value); 
    } 
} 
+0

nếu hệ thống thắng 8 hoặc 8.1 chạy hệ điều hành 64 bit thì lớp nào sẽ được sử dụng sau đó! – Raulp

+2

@Raulp: Các lớp học tương tự. Các lớp WMI là bit-agnostic. – Helen

15

Sử dụng the documentation đầu tiên để bạn biết những gì các phương tiện tài sản. Thử nghiệm với công cụ WMI Code Creator.

+2

Công cụ tuyệt vời thực sự. – isHuman