Обзор служебных программSMSMap

Джефф Тондт (Jeff Tondt)

Загрузить исходный код для этой статьи: UtilitySpotlight2007_07.exe (2477KB)

Изображение стоит тысячи слов. Эта известная пословица отражает идею, что сложные истории можно рассказать всего одним изображением, а также что одно изображение может быть более важным, чем текст большого объема. Она также точно характеризует цели визуализации при необходимости быстрого восприятия большого объема данных.

Для такого фаната System Management Server (SMS), как я, взгляд на всю иерархию SMS на одном изображении помогает понять расположение инфраструктуры. Возможно, вы сможете использовать такое изображение для показа управленцам состояния до и после осуществления плана перехода на SMS. В некоторых случаях при устранении неполадок такая диаграмма может быть очень полезной, поскольку помогает найти решение или, по крайней мере, получить помощь от других лиц. И конечно же, как ответственному администратору SMS вам необходимо документировать иерархию системы по множеству других причин.

Получение изображения

Вы, конечно, можете нарисовать такую диаграмму и сами. Вы, несомненно, можете засучить рукава, нарисовать иерархию SMS вручную и задокументировать параметры узла от руки. Если вы работаете с Microsoft® Operations Manager (MOM) для наблюдения за серверами SMS, вы можете использовать его для создания диаграммы иерархии, хотя я должен заметить, что диспетчер MOM не предназначен для создания изображений и точно не документирует параметры узла. Могут существовать другие методы и удобные средства, но я еще не встречал способов адекватного создания изображений и документирования параметров узла, по крайней мере, удовлетворительных для меня способов.

Поэтому я решил заняться этим самостоятельно. Так была создана программа SMSMap 1.0. SMSMap – это приложение Visual Basic® .NET, использующее управляемые библиотеки SMS в комплекте SDK SMS и автоматиризирующее Microsoft Visio® через COM. Служебная программа запрашивает нужный сервер узла SMS, а затем создает внешне привлекательную диаграмму Visio и экспортирует параметры узла в файл формата XML. Формат XML был выбран потому, что он является наиболее совместимым способом документирования параметров узла. Я также выбрал отображение ролей SMS, а не только физических серверов, относящихся к другим серверам SMS. Это позволяет создать диаграмму через слои Visio для просмотра иерархии SMS с нескольких точек зрения.

Рис. 1 Круговой формат

Рис. 1** Круговой формат **

В настоящий момент программа позволяет выбрать для диаграммы Visio один из шести форматов. Например, на рис. 1 показана очень простая иерархия SMS в круговом формате, а на рис. 2 показана эта же иерархия в формате блок-схемы. Эта программа довольно успешно работает с иерархиями большего размера, но в данной статье я хотел рассмотреть простые ситуации.

Рис. 2 Формат блок-схемы

Рис. 2** Формат блок-схемы **

Возможно будущие версии программы SMSMap будут документировать все параметры узла. В настоящий момент программа документирует только роли узла SMS и все границы. При небольших усилиях в файл XML можно экспортировать множество других параметров узла.

Использование SMSMap

Исходный код и файлы установки SMSMap доступны на веб-узле TechNet Magazine. Для установки программы просто запустите файл SMSMapSetup.msi, который выполнит установку. Не забывайте, что SMSMap использует программу Visio, поэтому последняя должна быть уже установлена. После установки запустите файл C:\Program Files\Microsoft\smsmap\smsmap.exe (если вы не установили его в другую папку, отличную от папки по умолчанию).

Программу SMSMap можно запустить на любом компьютере; ее не обязательно запускать с сервера узла (маловероятно, что на многих серверах узла SMS установлена Visio). Введите имя сервера сайта SMS источника запроса. Это может быть центральный сайт, если необходимо выполнить запрос всей иерархии, или это может быть любой дочерний основной сервер сайта, но в этом случае будет получена только иерархия дочернего основного сайта. Далее, введите учетную запись с разрешением на запрос SMS в формате домен\имя пользователя и пароль для этой учетной записи. (Пароль не будет отображаться, поэтому его можно вводить в присутствии других лиц.)

Шесть переключателей позволяют выбрать компоновку; также можно выбрать отображение или отсутствие ролей SMS на рисунке. Эти флажки расположены на вкладке «Options» (Параметры). При нажатии кнопки «Draw» (Рисование) запускается служебная программа. Сначала она проверяет наличие Visio, затем запрашивает указанный основной сервер узла SMS и добавляет объекты в диаграмму Visio. При загрузке программой SMSMap объектов диаграмма Visio может выглядеть некрасиво, но в конце процесса программа систематизирует объекты в указанном формате.

Погружение глубже

Теперь вы знакомы с процессом документирования иерархии SMS с помощью SMSMap и с причинами необходимости этого. Для тех, кто хочет расслабить мышцы, отвечающие за разработку, давайте подробно рассмотрим работу служебной программы.

SMSMap использует управляемые интерфейсы сервера узла SMS для сбора информации SMS и основные сборки взаимодействия Visio для создания диаграммы Visio со всеми необходимыми фигурами. Комплект SDK для SMS 2003 версии 3.1 содержит последний выпуск управляемых интерфейсов сервера сайта SMS. Этот набор управляемых интерфейсов позволяет настраивать и подключаться к серверу сайта SMS с помощью любого приложения или языка с поддержкой Microsoft .NET.

Эти интерфейсы используют пространство имен System.Management для взаимодейстия с поставщиком SMS через инструментарий Windows® Management Instrumentation (WMI). Для использования интерфейсов необходимо разработать приложение на языке, совместимом с .NET (например, C#, Visual Basic .NET и т.д.), и сослаться на библиотеку Microsoft.SystemsManagementServer.Automation.dll, входящую в сборку .NET в комплекте SDK для SMS.

Классы управления .NET стирают множество вызывающих раздражение особенностей объектной модели WMI для создания последовательной объектно-ориентированной модели. Основные задачи подключения WMI, перечисления объектов, выполнения метода, удаления объекта, получения объекта и записи событий могут быть осуществлены с помощью классов управления .NET.

Основные сборки взаимодействия Visio

Основная сборка взаимодействия позволяет использовать управляемый код для программного управления приложениями COM, такими как Visio. Основные сборки взаимодействия Visio позволяют объединить и расширить функции Visio в управляемые приложения.

Если на компьютере уже установлена платформа .NET Framework, при последующей установке Visio программа установки добавит основные сборки взаимодействия Visio в глобальный кэш сборок (GAC) на вашем компьютере. Можно добавить ссылку на основные сборки взаимодействия Visio из управляемых приложений.

После добавления ссылки на проект можно начать работу с объектами Visio из управляемого приложения. Visio имеет обширную объектную модель, предоставляющую набор классов, интерфейсов и перечислений для программного создания диаграмм.

Работа программы

Теперь, после описания интерфейсов основных компонентов для Visio и SMS, я объясню систему работы самой программы.

Первым шагом при использовании управляемых интерфейсов является подключение к поставщику SMS. Это может быть выполнено с помощью создания нового экземпляра класса SMSProvider. Этот класс выполняет внутренний поиск поставщика SMS для указанного сервера сайта и подключается к нему с определенным набором учетных данных. Если поставщик находится на локальном компьютере, при подключении к поставщику вместо предоставленных учетных данных будут использоваться текущие зарегистрированные в системе учетные данные. Хотя можно запустить программу SMSMap на сервере SMS, я рекомендую запускать ее на отдельной рабочей станции с установленной Visio. На большинстве серверов SMS программа Visio не установлена по очевидным причинам.

При доступе к данным на узле SMS через класс SMSProvider права доступа толкуются так же, как и при использовании административной консоли SMS. Это означает, например, что при попытке настройки параметров для сервера сайта с помощью SMSProvider подключенная к поставщику учетная запись должна иметь такой же набор прав, как и при использовании консоли администратора.

Класс SMSProvider предоставляет метод GetSiteSettings, позволяющий получить параметры для текущего сайта (которому принадлежит поставщик) или для любого сайта с определенным кодом сайта. Фрагмент кода на рис. 3 показывает подключение SMSMap к поставщику для необходимого сервера сайта. Учетные данные пользователя должны быть переданы в формате Domain\User. Также можно указать "." для обозначения текущего компьютера. На рис. 3 также показан код для отображения результатов в пользовательском интерфейсе и для ведения журнала.

Figure 3 Фрагмент GetSiteSettings

Imports System.Management
Imports Microsoft.SystemsManagementServer.Automation

 oProvider = New SMSProvider(txtServer.Text, txtUser.Text, txtPassword.Text)
 oSite = oProvider.GetSiteSettings()
 Trace.WriteLine(“Connected to “ & txtServer.Text & “: “ & My.Computer.Clock.LocalTime)
 ListBox1.Items.Add(“Connected to “ & txtServer.Text & “: “ & My.Computer.Clock.LocalTime)
 Application.DoEvents()
...

Следующим шагом является настройка файла XML для сбора и записи информации SMS для нужного сервера сайта, как показано на рис. 4.

Figure 4 Создание файла XML

‘ First, Create the XML File 
 oWriter = New XmlTextWriter(m_sXmlFile, System.Text.Encoding.UTF8)
 oWriter.WriteStartDocument()
 oWriter.WriteStartElement(“Hierarchy”)

 ‘ Export Target Site to XML
 oWriter.WriteStartElement(“Site”)
 oWriter.WriteAttributeString(“Code”, oSite.SiteCode.ToString.ToUpper)
 oWriter.WriteStartElement(“SiteServer”)
 oWriter.WriteAttributeString(“Name”, oSite.SiteServer.ToString.ToUpper)
 oWriter.WriteEndElement()
 oWriter.WriteStartElement(“ParentSiteCode”)
 oWriter.WriteAttributeString(“SiteCode”, “THIS_IS_THE_TOP”)
 oWriter.WriteEndElement()

...

Далее, на схеме Visio должен быть нарисован целевой сайт, а пользовательский интерфейс и журнал должны быть обновлены, как показано на рис. 5.

Figure 5 Рисование сайта в Visio

 ‘Draw Central Site
 dblXLocation = 4.25
 dblYLocation = 8.5
 vApp = New Visio.Application()
 vDoc = vApp.Documents.Add(“”)
 vStencil = vApp.Documents.OpenEx(TEMPLATEPATH, 4)
 ‘ Add Layers
 vExistingLayers = CType(vDoc.Pages(1).Layers, Visio.Layers)
 vLayer = CType(vExistingLayers.Add(“Site”), Microsoft.Office.Interop.Visio.Layer)

...

 If oSite.SiteType = SiteTypes.PrimarySite Then
 vFlowChartMaster = vStencil.Masters(“Primary Site”)
 ElseIf oSite.SiteType = SiteTypes.SecondarySite Then
 vFlowChartMaster = vStencil.Masters(“Secondary Site”)
 End If
 vToShape = vApp.ActivePage.Drop(vFlowChartMaster, dblXLocation, dblYLocation)
 vLayer.Add(vToShape, preserveMembers)

...

Для обработки всей иерархии целевого сайта выполняется простой описанный выше код для запроса SMS и рисования в Visio. Это функция с именем Level, рекурсивно вызываемая для проверки запроса всех дочерних сайтов независимо от размера иерархии. Функция Level собирает информацию сайта SMS и записывает ее в файл XML, пользовательский интерфейс и журнал для всех дочерних сайтов целевого сайта. Наконец, на рис. 6 показана схема Visio в выбранном при запуске программы формате. Затем файл XML и файл журнала закрываются.

Figure 6 Завершение

 vDoc.Pages(1).Layout()
 vDoc.Pages(1).ResizeToFitContents()

 ‘Calculate the page width and height with a 5% boundary 
 visCell = vDoc.Pages(1).PageSheet.Cells(“PageHeight”)
 dHeight = visCell.Result(“in”)
 visCell = vDoc.Pages(1).PageSheet.Cells(“PageWidth”)
 dWidth = visCell.Result(“in”)
 dHeight = dHeight + 1
 dWidth = dWidth + 1
 vDoc.Pages(1).PageSheet.Cells(“PageHeight”).Result(“in”) = dHeight
 vDoc.Pages(1).PageSheet.Cells(“PageWidth”).Result(“in”) = dWidth
 vDoc.Pages(1).CenterDrawing()
 Trace.WriteLine(“Arranged Sites “ & oSite.SiteServer & “: “ & My.Computer.Clock.LocalTime)
 ListBox1.Items.Add(“Arranged Sites “ & oSite.SiteServer & “: “ & My.Computer.Clock.LocalTime)
 vFlowChartMaster = vStencil.Masters(“Background world”)
 vApp.ActivePage.Drop(vFlowChartMaster, 0, 0)

 ‘Finish up
 vDoc.SaveAs(SAVENEWFILE)
 vDoc.Close()
 vApp.Quit()
 vDoc = Nothing
 vApp = Nothing
 GC.Collect()

...

Только начало

Конечно это только начала и много возможностей можно улучшить. Необходимо исследовать точки управления устройством, поскольку я не вижу их в SDK. Для полного документирования сайта необходимо добавить ряд дополнительных параметров сайта. Возможно, необходимо выполнить некоторую другую работу для добавления различных параметров макета Visio для улучшения представления небольших и больших иерархий. Каждый тип макета создает собственные трудности при попытке создания эффективного отображения. И, конечно же, очень важным следующим этапом является добавление поддержки диспетчера System Center Configuration Manager 2007. Но даже первая версия SMSMap может помочь администраторам SMS в представлении большого изображения и проверке некоторых ситуаций «что, если» со слоями и прозрачностью Visio.

С помощью загрузки данного кода вы можете расширить возможности программы в соответствии с вашими требованиями. Я протестировал SMSMap в операционной системе Windows XP с пакетом обновления (SP2) с Visio 2003 и Windows Vista™ Enterprise с Visio 2007. Если у вас есть предложения по улучшению программы, отправьте их по адресу jeff.tondt@microsoft.com.

Джефф Тондт (Jeff Tondt) - старший консультант II класса в консультационной службе корпорации Майкрософт. Он занимается управлением системами, автоматизацией и управлением исправлениями. Он является экспертом по SMS, с ним можно связаться по адресу jeff.tondt@microsoft.com.

© 2008 Корпорация Майкрософт и компания CMP Media, LLC. Все права защищены; полное или частичное воспроизведение без разрешения запрещено.