560 likes | 803 Vues
Технология Windows Management Instrumentation. Марат Бакиров Эксперт по разработке ПО Microsoft Россия , Екатеринбург http://blogs.msdn.com/mbakirov. В омут с головой или из пушки по воробьям. Сколько нужно усилий чтобы получить Мак Адрес сетевой карты?
E N D
Технология Windows Management Instrumentation Марат Бакиров Эксперт по разработке ПО Microsoft Россия, Екатеринбург http://blogs.msdn.com/mbakirov
В омут с головой или из пушки по воробьям. • Сколько нужно усилийчтобы получить Мак Адрес сетевой карты? • 6кликов и 3 строчки кода (не считая using). • foreach (NetworkAdapter na in NetworkAdapter.GetInstances()) • { • Console.WriteLine(na.MACAddress); • }
В омут Демо Марат Бакиров Эксперт по разработке ПО Microsoft Россия, Екатеринбург
Содержание • Введение • Зачем это нужно и что это дает. • Как это устроено? • Как с этим работать? • Встроенные инструменты • .NET - Как использовать WMI? • .NET - Как позволить WMI использовать нас? • Как позволить WMI использовать нас еще лучше. • Заключение
Зачем это нужно – текущие проблемы • Возрастающая сложность систем • Возрастающее количество элементов управляемых одним человеком • Отсутствие у ItProзнаний о специфике каждой конкретной программы или системы. • Большое количество связей между системами
Microsoft Vision • www.microsoft.com/business/dsi • Dynamic Systems Initiative (DSI) is about building software that enables knowledge of an IT system to be created, modified, transferred, and operated on throughout the life cycle of that system. • What is a Manageable Application? • “an application that can be easily installed, monitored, diagnosed and corrected by IT operations, using standard IT Pro tools, without intervention from developers”
Архитектура DFO Installer WMI Windows Performance Logs Management Pack Group Policy IT Pro Windows PowerShell VS MMD MMC 3.0 Application Windows Event Logs Web/App.config
Большое количество связей между системами. Системы SNMP Protocol Data format DMI Protocol Data format Other Protocol Data format
Большое количество связей между системами. Системы SNMP Protocol Data format WMI DMI Protocol Data format Other Protocol Data format
Что дает WMI? • Единая точка входа для управления и мониторинга чего угодно • Расширяемая • Сетевая • Скриптуемая • Активная (предоставляет события)
А где это вообще используется? • Почти везде • +2300 WMI classes, + 30000 properties exposed (Windows 2003) • В стандартной поставке , начиная с Windows 2000 • Win 95/98 – можно скачать • Windows NT 4.0 = ± 15 providers • Windows 2000 = ± 29 providers • Windows 2003 = 95 providers • Windows 2008 server = +- 106 providers • WMI широко используется, и внедряется во многие инструменты управления. • SC Operations Manager, SMS, HP OpenView
Содержание • Введение • Зачем это нужно и что это дает. • Как это устроено? • Как с этим работать? • Встроенные инструменты • .NET - Как использовать WMI? • .NET - Как позволить WMI использовать нас? • Как позволить WMI использовать нас еще лучше. • Заключение
.NET Client Applications Windows Forms Web Forms POWER SHELL C/C++ Client Scripts WMI Consumers (Management Applications) System.Management WMI Scripting API COM Inter-Op 3 1 WMI COM API COM/DCOM 2 WMI Repository WMI Core (CIM Object Manager) WMIInfrastructure COM/DCOM COM Inter-Op SNMP WMI Provider Cimv2 WMI Provider Any WMI Provider WMI Providers System.Management. Instrumentation … Managed Objects SNMP Managed entity Windows (Win32) Managed entity Any Managed entity (Native Code) .NET WMI Provider .NET Managed App/entity Native C/C++ .NET C#, VB.NET, etc Архитектура WMI
Возможности • Пространства имен • Классы • Дочерние классы • Свойства • Ключ • Ссылка • Association • Методы • События • Запросы
Пространства имен \\Server1\Root\Cimv2:Win32_LogicalDisk.DeviceId='C:'
Win32_ShareToDirectory Properties Win32_Directory Share SharedElement Properties Properties Name Name Win32_Share Ассоциация \\Server\root\cimv2:Win32_Directory.Name="C:\\Temp" • Type of Class • Naming \\Server\root\cimv2:Win32_Share.Name=“Temp"
Примеры WQL • SELECT * FROM Win32_LogicalDisk • SELECT installDate, Manufacturer FROM Win32_Adapter • SELECT * FROM CIM_MediaAccessDevice WHERE __CLASS = 'Win32_CDROMDrive'" • SELECT * FROM __InstanceCreationEvent WITHIN 60 WHERE TargetInstance ISA "Win32_LogicalDisk“ • Select * from __InstanceCreationEvent Where TargetInstance ISA 'Win32_NTLogEvent‘ • SELECT * FROM __ InstanceCreationEvent WHERE TargetInstance ISA ’Win32_PrintJob’ GROUP WITHIN 30 BYTargetInstance.OwnerHAVING NumberOfEvents > 5
Содержание • Введение • Зачем это нужно и что это дает. • Как это устроено? • Как с этим работать? • Встроенные инструменты • .NET - Как использовать WMI? • .NET - Как позволить WMI использовать нас? • Как позволить WMI использовать нас еще лучше. • Заключение
Встроенные инструменты • WMI Control MMC Snap In • WMI Studio • WMI Browser • ODBC WMI provider (WQL) • WMI eventviewer • Visual Studio • PowerShell – Get-WmiObject • WMI Console (wmic.exe)
Встроенные инструменты Демо Марат Бакиров Эксперт по разработке ПО Microsoft Россия, Екатеринбург
Содержание • Введение • Зачем это нужно и что это дает. • Как это устроено? • Как с этим работать? • Встроенные инструменты • .NET - Как использовать WMI? • .NET - Как позволить WMI использовать нас? • Как позволить WMI использовать нас еще лучше. • Заключение
Программа для доступа к WMI информации Демо Марат Бакиров Эксперт по разработке ПО Microsoft Россия, Екатеринбург
Как использовать WMI gодключение • ManagementScopescope = newManagementScope( "\\\\FullComputerName\\root\\cimv2"); • ManagementPathp = newManagementPath( "\\\\ComputerName\\root" + "\\cimv2:Win32_LogicalDisk.DeviceID=\"C:\"");
Как использовать WMI Подключение • ConnectionOptions options = new ConnectionOptions(); • if (!MainForm.isLocalServerName(computer.Text)) • { • options.Username = user.Text; • options.Password = password.Text; • password.Text = ""; • if (domain.Text != "") • { • options.Authority = "NTLMDOMAIN:" + domain.Text; • } • } • //Удаленный компьютер • ManagementScope scope = new ManagementScope("\\\\" + computer.Text + "\\root\\cimv2", options); • scope.Connect();
Основные обьекты • ManagementBaseObject • Properties • ManagementObject • InvokeMethod() • ManagementClass • GetInstances • GetSubclasses() • GetRelatedClasses()
Получаем Классы ManagementClassclass = new ManagementClass(scope,new ManagementPath(strClassName), new ObjectGetOptions()) …. foreach (PropertyData data in mgmClass.Properties) { if (!table.Columns.Contains(data.Name)) { DataColumn column = table.Columns.Add(data.Name); column.DataType = typeof(String); } }
Получаем Обьекты ManagementObjectCollection objects = mgmClass.GetInstances(); table.Rows.Clear(); foreach (ManagementObjectmgmObject in objects) { DataRow newRow = table.NewRow(); foreach (PropertyDatadata in mgmObject.Properties) { newRow[data.Name] = data.Value.ToString(); } table.Rows.Add(newRow); newRow.AcceptChanges(); }
Правим Объекты ManagementObjectdrive_d = new ManagementObject(@"\\.\root\CIMV2:Win32_LogicalDisk.DeviceID=""D:"""); drive_d["VolumeName"] = "My Label"; drive_d.Put();
Правим обьекты Демо Марат Бакиров Эксперт по разработке ПО Microsoft Россия, Екатеринбург
Подписываемся на события в коде WqlEventQuery query = newWqlEventQuery("__InstanceCreationEvent", new TimeSpan(0,0,1), "TargetInstance isa \"Win32_Process\""); ManagementEventWatcher watcher = new ManagementEventWatcher(query); watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived); watcher.Start(); ManagementBaseObjecte = watcher.WaitForNextEvent();
Подписка на события Демо Марат Бакиров Эксперт по разработке ПО Microsoft Россия, Екатеринбург
Содержание • Введение • Зачем это нужно и что это дает. • Как это устроено? • Как с этим работать? • Встроенные инструменты • .NET - Как использовать WMI? • .NET - Как позволить WMI использовать нас? • Как позволить WMI использовать нас еще лучше. • Заключение
Как позволить WMI использовать нас?классы [assembly: Instrumented("root\\my_net_sample_2")] [InstrumentationClass(InstrumentationType.Abstract)] public class TopInstance : Instance private string myProperty; [ManagedName("MyOtherName")] public string MyProperty { get { return myProperty; } set { myProperty = value; } } leaf1a.Published = true; leaf1a.Published = false;
Как позволить WMI использовать нас?классы [assembly:Instrumented] [InstrumentationClass(InstrumentationType.Abstract)] public class TopInstance2 { } Instrumentation.Publish(leaf1a); Instrumentation.Revoke(leaf1a);
Содержание • Введение • Зачем это нужно и что это дает. • Как это устроено? • Как с этим работать? • Встроенные инструменты • .NET - Как использовать WMI? • .NET - Как позволить WMI использовать нас? • Как позволить WMI использовать нас еще лучше. • Заключение
WMI Provider Extension v2.0 • Цель – увеличить масштабируемость текущей модели • Режимы – coupled и decoupled • Decoupled • Приложение предоставляет провайдер самостоятельно (in-process) • Coupled • Wmiуправляет циклом создания провайдеров • Интересные сценарии – редактирование вебconfig • .NET Framework 3.5
Построение провайдераNamespaces and Attributes • System.Core/System.Management [.Instrumentation] • Пространство имен • Пространство имен WMI • Атрибут • using System.Management.Instrumentation • [assembly: WmiConfiguration(@"root\MicrosoftSearchSample, HostingModel = ManagementHostingModel.Decoupled, IdentifyLevel = false)] • [ManagementEntity] • public class SearchProvider
Построение провайдера Defining class keys • Management Key • Не надо использовать GUID • Read only • \\Server1\Root\Cimv2:Win32_LogicalDisk.DeviceId='C:' • [ManagementKey] • public string Name • { • get • { • return “WebApplicationName"; • } • }
Построение провайдера read/write properties • ManagementConfiguration • Поля или свойства • Обозначает свойство для чтения и записи • [ManagementConfiguration] • public boolDisplayURL • { • get • { • return Application["default_display_urls"]; • } • set • { • Application["default_display_urls"] = value; • } • }
Построение провайдера read only properties • ManagementProbe • Поля или свойства • Обозначает свойство для чтения • [ManagementProbe] • public intQueryCount • { • get • { • Application.Lock(); • object Value = Application["counter"]; • Application.UnLock(); • return (Int32)Value; • } • }
Построение провайдера methods • ManagementTask • Метод WMI • [ManagementTask] • public void SetSiteUrl(string site) • { • Application.Lock(); • Application["site_to_search"] = site; • Application.UnLock(); • }
Построение провайдера Installation • Необходим инсталлятор • using System.Configuration.Install; • ... • [System.ComponentModel.RunInstaller(true)] • public class TheInstaller : DefaultManagementInstaller • { • }
Построение провайдера Модель провайдеров • Можно самому управлять созданием обьектов • [ManagementCreate] • [ManagementBind] • [ManagementRemove] • [ManagementEnumerator]
Построение провайдера Публикация и отзыв decoupled провайдера • Публикация провайдера • Оттзыв провайдера • Есть также методы Register/Unregister Assembly • InstrumentationManager.RegisterType(typeof(MyProvider)); • Instrumentation.UnregisterType(typeof(MyProvider));
Пример • Провайдер который умеет работать с строками и выдавать их размер! • Провайдер умеет работать с любыми строками!
WMI2.0 Provider Демо Марат Бакиров Эксперт по разработке ПО Microsoft Россия, Екатеринбург
Выводы • Поддержка записи свойств • Вызов методов • Масштабируемая модель.