Schwerpunkt DienstprogrammeSMSMap

Jeff Tondt

Laden Sie den Code für diesen Artikel herunter: UtilitySpotlight2007_07.exe (2477KB)

Ein Bild sagt mehr als tausend Worte. Dieses bekannte Sprichwort bringt den Gedanken zum Ausdruck, dass über ein einziges Bild komplexe Geschichten erzählt werden können oder dass ein Bild einflussreicher sein kann, als selbst der längste Text. Es beschreibt auch treffend die Ziele der Visualisierung, bei der große Datenmengen schnell aufgenommen werden müssen.

Als Experte für Systemverwaltungsserver (System Management Server, SMS) kann ich besser verstehen, wie die Infrastruktur aufgebaut ist, wenn ich die gesamte SMS-Hierarchie in einem Bild vor mir sehe. Ein solches Bild könnte auch verwendet werden, um der Unternehmensleitung einen Vorher-Nachher-Vergleich einer SMS-Migration darzulegen. Bei der Fehlerbehebung könnte eine solche Abbildung möglicherweise bei der Lösungssuche oder zumindest für die Hilfestellung durch andere nützlich sein. Als verantwortlicher SMS-Administrator müssen Sie die Systemhierarchie natürlich auch aus verschiedenen anderen Gründen dokumentieren.

So machen Sie sich ein Bild

Natürlich ist es möglich, ein solches Diagramm selbst zu zeichnen. Sie können die Ärmel aufkrempeln, die SMS-Hierarchie manuell zeichnen und die Standorteinstellungen von Hand dokumentieren. Wenn Ihre SMS-Server vom Microsoft® Operations Manager (MOM) überwacht werden, kann dieser die Hierarchie zeichnen, allerdings ist MOM für die Darstellung von Bildern nicht ideal, und die Standorteinstellungen werden gar nicht dokumentiert. Es gibt sicher andere Methoden und praktische Tools, aber ich habe bisher noch nichts gefunden, womit gute Bilder angemessen erstellt und die Standorteinstellungen zu meiner Zufriedenheit dokumentiert werden.

Ich habe mich daher entschieden, mein eigenes Tool zu schreiben. So entstand SMSMap 1.0. SMSMap ist eine Visual Basic® .NET-Anwendung, die SMS-verwaltete Bibliotheken im SMS SDK verwendet und Microsoft Visio® über COM automatisiert. Das Dienstprogramm fragt einen Ziel-SMS-Standortserver ab, erstellt ein visuell ansprechendes Visio-Diagramm und exportiert Standorteinstellungen in eine XML-Datei. Ich habe mich für XML entschieden, da es die kompatibelste Möglichkeit ist, die Standorteinstellungen zu dokumentieren. Außerdem wollte ich die SMS-Rollen zeigen und nicht nur die physischen Server, die sich auf andere SMS-Server beziehen. Dadurch kann über Visio-Layer am Diagramm herumgebastelt werden, um von unterschiedlichen Standpunkten auf die SMS-Hierarchie zu sehen.

Abbildung 1 Strahlenförmiges Format

Abbildung 1** Strahlenförmiges Format **

Derzeit können Sie mit dem Programm sechs verschiedene Formate für das Visio-Diagramm auswählen. Zum Beispiel zeigt Abbildung 1 eine sehr einfache SMS-Hierarchie mithilfe des strahlenförmigen Formats, während in Abbildung 2 dieselbe Hierarchie als Flussdiagramm dargestellt ist. Das Dienstprogramm funktioniert auch mit viel größeren Hierarchien sehr gut, doch für diese Zwecke sollte es einfach bleiben.

Abbildung 2 Flussdiagramm

Abbildung 2** Flussdiagramm **

In Zukunft wird SMSMap wahrscheinlich alle Standorteinstellungen dokumentieren können. Derzeit werden nur die SMS-Standortrollen und alle Begrenzungen dokumentiert. Mit geringem Aufwand könnten viele weitere Standorteinstellungen in die XML-Datei exportiert werden.

Verwenden von SMSMap

Der Quellcode und die Installationsdateien für SMSMap sind auf der TechNet Magazin-Website verfügbar. Führen Sie zum Installieren SMSMapSetup.msi aus, und Sie werden durch die Installation geführt. Beachten Sie, dass SMSMap Visio verwendet. Daher muss dieses Tool ebenfalls installiert sein. Führen Sie nach der Installation C:\Programme\Microsoft\smsmap\smsmap.exe aus (es sei denn, SMSMap wurde nicht im Standardordner installiert).

SMSMap kann auf einem beliebigen Computer ausgeführt werden, es muss sich dabei nicht um den Standortserver handeln. Außerdem ist es unwahrscheinlich, dass Visio auf SMS-Standortservern installiert ist. Geben Sie den Namen des SMS-Standortservers ein, von dem die Abfrage ausgehen soll. Das kann der zentrale Standort sein, wenn Sie die gesamte Hierarchie abfragen wollen, oder ein untergeordneter primärer Standortserver. In diesem Fall erhalten Sie jedoch lediglich die Hierarchie vom untergeordneten primären Standort abwärts. Geben Sie anschließend das Konto mit Berechtigung zum Abfragen des SMS im Format Domäne\Benutzername gefolgt vom Kennwort für das Konto ein. (Das Kennwort wird nicht angezeigt. Sie können diesen Vorgang also in Anwesenheit anderer ausführen.)

Über sechs Optionsfelder kann das Layout ausgewählt werden. Außerdem können Sie festlegen, ob SMS-Rollen in der Zeichnung aufgeführt werden sollen. Diese Kontrollkästchen befinden sich unter der Registerkarte „Options“ (Optionen). Durch Klicken auf die Schaltfläche „Draw“ (Zeichnen) wird das Dienstprogramm gestartet. Zunächst wird geprüft, ob Visio verfügbar ist, dann wird der primäre SMS-Standortserver abgefragt, und die Objekte werden zum Visio-Diagramm hinzugefügt. Eventuell sieht das Visio-Diagramm zunächst unschön aus, wenn SMSMap Objekte ablegt, doch am Ende werden alle Objekte durch das Dienstprogramm im zu Beginn festgelegten Format organisiert.

Ein tieferer Einblick

Oben wurde aufgezeigt, warum und wie Sie Ihre SMS-Hierarchie mithilfe von SMSMap dokumentieren. Im Folgenden wird die Arbeitsweise des Dienstprogramms für Entwickler näher beleuchtet.

SMSMap verwendet die verwalteten SMS-Standortserverschnittstellen, um Informationen zu sammeln, und die primären Interopassemblys für Visio, um ein Visio-Diagramm zu generieren, in dem alle erforderlichen Formen enthalten sind. SMS 2003 SDK Version 3.1 enthält die neueste Version der verwalteten SMS-Standortserverschnittstellen. Mit diesem Satz verwalteter Schnittstellen können Sie einen SMS-Standortserver über eine beliebige Microsoft .NET Framework-fähige Sprache oder Anwendung konfigurieren.

Diese Schnittstellen verwenden den System.Management-Namespace zum Interagieren mit einem SMS-Anbieter über die Windows® Verwaltungsinstrumentation (Windows Management Instrumentation, WMI). Die Anwendung muss mit einer .Net-kompatiblen Sprache (z. B. C#, Visual Basic .NET und so weiter) entwickelt werden, um die Schnittstellen zu verwenden, und auf die Microsoft.SystemsManagementServer.Automation.dll verweisen, die die .NET-Assembly mit dem SMS SDK bereitgestellt hat.

Durch die .NET-Verwaltungsklassen werden viele Eigenheiten des WMI-Objektmodells bereinigt und ein gleichmäßiges, objektorientiertes Modell angezeigt. Die grundlegenden Aufgaben der WMI-Verbindung wie Objektenumeration, Methodenausführung, Objektlöschung, Objektabruf und Ereignisaufzeichnung können über die .NET-Verwaltungsklassen erzielt werden.

Primäre Interopassemblys für Visio

Eine primäre Interopassembly ermöglicht Ihnen das Verwenden von verwaltetem Code zur programmatischen Steuerung von COM-Anwendungen wie Visio. Mit den primären Interopassemblys für Visio können Sie Visio-Funktionalität in verwaltete Anwendungen integrieren und anschließend erweitern.

Wenn .NET Framework bereits auf Ihrem Computer installiert ist und Sie danach Visio installieren, fügt das Installationsprogramm die primären Interopassemblys für Visio auf Ihrem Computer zum globalen Assemblycache (Global Assembly Cache, GAC) hinzu. Sie können von den verwalteten Anwendungen einen Verweis auf die primären Interopassemblys für Visio hinzufügen.

Nach dem Hinzufügen des Verweises zum Projekt ist das Arbeiten mit Visio-Objekten von der verwalteten Anwendung aus möglich. Visio verfügt über ein umfangreiches Objektmodell, das einen Satz Klassen, Schnittstellen und Enumerationen zum programmgesteuerten Erstellen von Diagrammen bietet.

Programmablauf

Nach der Beschreibung der wesentlichen Komponentenschnittstellen für Visio und SMS soll nun der Ablauf des Dienstprogramms beschrieben werden.

Der erste Schritt bei der Verwendung der verwalteten Schnittstellen besteht in der Herstellung einer Verbindung zum SMS-Anbieter. Dies kann durch Erstellen einer neuen Instanz der SMS-Anbieterklasse erreicht werden. Intern sucht diese Klasse nach dem SMS-Anbieter für den angegebenen Standortserver und stellt eine Verbindung mit einem bestimmten Satz Anmeldeinformationen her. Wenn sich der Anbieter auf dem lokalen Computer befindet, werden die momentan protokollierten Anmeldeinformationen anstatt der bei der Verbindung zum Anbieter bereitgestellten Anmeldeinformationen verwendet. Obwohl SMSMap auf dem SMS-Server ausgeführt werden kann, empfehle ich das Ausführen auf einer separaten Arbeitsstation, auf der Visio installiert ist. Aus offensichtlichen Gründen ist Visio auf den meisten SMS-Standortservern nicht installiert.

Wenn Sie über die SMS-Anbieterklasse auf Daten auf dem SMS-Standort zugreifen, werden Sicherheitsrechte so gehandhabt, als würden Sie die SMS-Administratorkonsole verwenden. Das bedeutet beispielsweise, dass beim Versuch, die Einstellungen für einen Standortserver über einen SMS-Anbieter zu konfigurieren, das Konto für die Herstellung der Verbindung zum Anbieter über dieselben Rechte verfügen muss wie bei der Verwendung der Administratorkonsole.

Die SMS-Anbieterklasse bietet eine GetSiteSettings-Methode, mit der die Standorteinstellungen für den aktuellen Standort (zum dem der Anbieter gehört) oder einen anderen Standort mit einem speziellen Standortcode abgerufen werden können. Der Codeausschnitt in Abbildung 3 zeigt, wie sich SMSMap mit dem Anbieter des Zielstandortservers verbindet. Die Benutzeranmeldeinformationen müssen im Format Domäne\Benutzer weitergegeben werden. Sie können auch „.“ angeben, um den aktuellen Computer festzulegen. Abbildung 3 umfasst außerdem Code, mit dem die Ergebnisse in der Benutzeroberfläche und zum Protokollieren angezeigt werden können.

Figure 3 GetSiteSettings-Ausschnitt

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()
...

Im nächsten Schritt wird die XML-Datei zum Sammeln und Aufzeichnen der SMS-Informationen für den Zielstandortserver eingerichtet, wie in Abbildung 4 dargestellt.

Figure 4 Erstellen der XML-Datei

‘ 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()

...

Danach muss der Zielstandort in das Visio-Diagramm eingezeichnet und in der Benutzeroberfläche und dem Protokoll aktualisiert werden, wie aus Abbildung 5 hervorgeht.

Figure 5 Zeichnen des Standorts in 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)

...

Der oben beschriebene grundlegende Code, der SMS abfragt und in Visio zeichnet, wird für die gesamte Hierarchie des Zielstandorts ausgeführt. Dabei handelt es sich um eine Funktion namens Level, die rekursiv aufgerufen wird, damit auch untergeordnete Standorte unabhängig von der Größe der Hierarchie abgefragt werden. Level sammelt die SMS-Standortinformationen und zeichnet sie in XML, der Benutzeroberfläche und dem Protokoll für jeden untergeordneten Standort des Zielstandorts auf. Abbildung 6 schließlich zeigt, wie das Visio-Diagramm im zu Beginn des Dienstprogramms ausgewählten Format formatiert wird. Danach werden die XML- und Protokolldateien geschlossen.

Figure 6 Abschließen

 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()

...

Wie geht es weiter?

Selbstverständlich ist dies erst der Anfang. Es gibt noch zahlreiche Verbesserungsmöglichkeiten. Es muss untersucht werden, ob Medienverwaltungspunkte im SDK enthalten sind. Zur vollständigen Dokumentation eines Standorts könnten zusätzliche Standorteinstellungen hinzugefügt werden. Eventuell müssen unterschiedliche Visio-Layouteinstellungen entwickelt und hinzugefügt werden, damit kleine und große Hierarchien besser dargestellt werden. Bei der Erstellung effektiver Anzeigen treten für jeden Layouttyp andere Probleme auf. Selbstverständlich ist das Hinzufügen von Unterstützung für System Center Configuration Manager 2007 ein wichtiger nächster Schritt. Doch selbst mit dieser ersten Version von SMSMap können sich SMS-Administratoren einen Überblick verschaffen und mit Was-wäre-wenn-Szenarios mit Visio-Schichten und -Transparenzen experimentieren.

Wenn Sie den Quellcode herunterladen, können Sie das Dienstprogramm an Ihre Anforderungen anpassen. Ich habe SMSMap auf Windows XP SP2 mit Visio 2003 und Windows Vista™ Enterprise mit Visio 2007 getestet. Wenn Sie Vorschläge zur Verbesserung dieses Dienstprogramms haben, senden Sie eine E-Mail an jeff.tondt@microsoft.com.

Jeff Tondt ist Senior Consultant II für Microsoft Consulting Services. Seine Schwerpunkte sind die Bereiche Systemverwaltung, Automatisierung und Patchverwaltung. Er ist Experte für SMS und kann über jeff.tondt@microsoft.com erreicht werden.

© 2008 Microsoft Corporation und CMP Media, LLC. Alle Rechte vorbehalten. Die nicht genehmigte teilweise oder vollständige Vervielfältigung ist nicht zulässig.