Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.188.152.162] |
|
Сообщ.
#1
,
|
|
|
Всем привет!
Хочу вложить свою лепту в развитие форума .NET. Вот написал вчера кое что для FAQ. Опыт первый так что критике буду только рад. Введение WMI – это инструментарий, позволяющий выполнять задачи менеджмента для конечных приложений таких как Microsoft Exchange, Microsoft SQL Server, and Microsoft Internet Information Services (IIS). Архитектура WMI 1. Клиенты (Clients) – програмные компоненты, выполняющие команды WMI 2. Менеджер объектов (Object manager) - Посредник между клентами и поставщиками (providers) открывающий доступ к ключевым сервисам таким как фильтрация событий, механизм запросов и т.д. 3. Поставщики (Providers) – Програмные компоненты возвращающие данные приложениям клиента, связывающие клиента с управляемой им структурой. Запросы Вы можете точно определить данные которые вам нужны используя запросы. Запросы ограничивают количество возвращаемых данных указывая только определенные интересущие вас выходные данные (Используя SELECT) а также использовать условия выборки этох данных (используя предложение WHERE). Например запрос SELECT * FROM Win32_LogicalDisk WHERE FreeSpace < 2000000 возвращает все логические диски у которых свободное пространство меньше 2 MB. Кроме запросов есть еще один метод использования WMI – создание объектов ManagementClass.. Здесь приведу пример класса использующего WQL запросы и объекты WMI классов. Не забудьте добавить ссылку на пространство имен System.Management using System; using System.Management; using System.Management.Instrumentation; using System.Data; namespace WMIClass { public class WMIClass { private ManagementObjectSearcher searcher; /// Конструктор класса. Инициализация полей. public WMIClass() { this.searcher = new ManagementObjectSearcher(); } /// Используя WMI и WQL запрос получить информацию об ОС /// (BuildNumber,BuildType,Version,LocalDateTime,LastBootUpTime,InstallDate). /// returns Метод класса объект DataTable public DataTable GetOSInfo() { DataTable res = new DataTable("OperatingSystem"); // Результирующая таблица //Колонки таблицы - свойства класса Win32_OperatingSystem //см http://msdn.microsoft.com/library/en-us/wmisdk/wmi/win32_operatingsystem.asp res.Columns.Add("BuildNumber", System.Type.GetType("System.String")); res.Columns.Add("BuildType", System.Type.GetType("System.String")); res.Columns.Add("Version", System.Type.GetType("System.String")); res.Columns.Add("InstallDate", System.Type.GetType("System.String")); res.Columns.Add("LocalDateTime", System.Type.GetType("System.String")); res.Columns.Add("LastBootUpTime", System.Type.GetType("System.String")); foreach(ManagementObject osObj in this.SendCommand("*", "Win32_OperatingSystem", "")) { DataRow dr = res.NewRow(); dr["BuildNumber"] = osObj["BuildNumber"].ToString(); dr["BuildType"] = osObj["BuildType"].ToString(); dr["Version"] = osObj["Version"].ToString(); dr["InstallDate"] = osObj["InstallDate"].ToString(); dr["LocalDateTime"] = osObj["LocalDateTime"].ToString(); dr["LastBootUpTime"] = osObj["LastBootUpTime"].ToString(); res.Rows.Add(dr); } return res; } public string GetOSInfo_ThroughObject() { try { string res = ""; ManagementClass osClass = new ManagementClass("Win32_OperatingSystem"); // Объект класса Win32_OperatingSystem. //Вызываем метод GetInstances возвращает коллекцию ManagementObjectCollection из свойств класса WMI см. //http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemmanagementmanagementobjectcollectionclasstopic.asp ManagementObjectCollection osCollection = osClass.GetInstances(); foreach(ManagementObject osObj in osCollection) { res += "Version: " + osObj["Version"].ToString() + "<BR>" + "InstallDate: " + osObj["InstallDate"].ToString() + "<BR>" + "BuildNumber: " + osObj["BuildNumber"].ToString() + "<BR>" + "BuildType: " + osObj["BuildType"].ToString() + "<BR>" + "LocalDateTime: " + osObj["LocalDateTime"].ToString() + "<BR>" + "LastBootUpTime: " + osObj["LastBootUpTime"].ToString() + "<BR>"; } return res; } catch(Exception err) { return "Error: " + err.Message; } } /// Используя WMI и WQL запрос получить информацию о логических дисках на компьютере /// returns объект DataTable public DataTable GetLocalDiskInfo() { try { DataTable res = new DataTable("Disks"); // Результирующая таблица //Колонки таблицы - свойства класса Win32_LogicalDisk res.Columns.Add("Caption", System.Type.GetType("System.String")); res.Columns.Add("FileSystem", System.Type.GetType("System.String")); res.Columns.Add("FreeSpace", System.Type.GetType("System.String")); res.Columns.Add("Name", System.Type.GetType("System.String")); res.Columns.Add("VolumeSerialNumber", System.Type.GetType("System.String")); res.Columns.Add("Size", System.Type.GetType("System.String")); //Здесь вызываем метод класса SendCommand с параметром where "DriveType = 3" что означает //локальные логические диски см. //http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/win32_logicaldisk.asp foreach(ManagementObject diskObj in this.SendCommand("*", "Win32_LogicalDisk", "DriveType = 3")) { DataRow dr = res.NewRow(); dr["Caption"] = diskObj["Caption"].ToString(); dr["FileSystem"] = diskObj["FileSystem"].ToString(); dr["FreeSpace"] = diskObj["FreeSpace"].ToString(); dr["Name"] = diskObj["Name"].ToString(); dr["VolumeSerialNumber"] = diskObj["VolumeSerialNumber"].ToString(); dr["Size"] = diskObj["Size"].ToString(); res.Rows.Add(dr); } return res; } catch(Exception err) { return null; } } /// Метод формирует команду WQL и исполняет ее /// param name="fields"Поля классов WMI которые нужно возвращать /// param name="from"Имя класса WMI из которого выбираются нужные поля /// param name="where"Условия выбороки /// returnsКоллекцию результатов выполнения запроса private ManagementObjectCollection SendCommand(string fields, string from, string where) { try { if(where != "") where = " WHERE " + where; else where = ""; string command = String.Format("SELECT {0} FROM {1} {2}", fields, from, where); this.searcher.Query.QueryString = command; return this.searcher.Get(); } catch { return null; } } } } Мспользовались ресурсы MSDN и вот эта статейка Классы WMI |
Сообщ.
#2
,
|
|
|
Таки не понятно где узнавать имена классов WMI. И вообще, уж ОЧЕНЬ поверхностно.
Надо хотя бы такую ссылку привести: http://www.microsoft.com/downloads/details.aspx?FamilyId=6430F853-1120-48DB-8CC5-F2ABDC3ED314&displaylang=en |
Сообщ.
#3
,
|
|
|
Ссылку на классы WMI поставил
Цитата И вообще, уж ОЧЕНЬ поверхностно. Не знаю, для меня этого было бы достаточно чтобы понять что такое WMI и начать писать что-то для конкретных задач |
Сообщ.
#4
,
|
|
|
мне необходимо использовать Win32_NetworkAdapterConfiguration. Но если в системе 2 или более адаптера, как выбрать нужный? В Win32_NetworkAdapterConfiguration я не нашел нужного параметра, но он есть в Win32_NetworkAdapter. Как бы их увязать друг с другом? Кажется через Win32_NetworkAdapterSetting, но не пойму как
и еще не пойму, как вызвать метод класса Win32_.... значение мы получаем что-то вроде osObj["BuildNumber"].ToString(). А как быть если нужно не значение, а метод? |