Poor Mans Management Solution

Onderstaand artikel is eerder gepubliceerd in het november'98 nummer van NT-Today

Wim Verveen, e-mail: wim@win2kwereld.nl

 

Systems Management Server (SMS) is een produkt van microsoft wat bedoeld is om een aantal beheersfuncties voor uw netwerk aan te bieden. Zoals echter wel meer gebeurt bevat het natuurlijk net niet alle functionaliteit die u zou wensen. Voor elk probleem is een oplossing en wel in de vorm van een aantal derde partijen die add-ons aanbiedt om ontbrekende functionaliteit aan te vullen of onvolledigheden weg te poetsen.

Al deze add-ons hebben een groot nadeel: ze kosten geld. Geld wat u natuurlijk beter kunt gebruiken. Vooropgesteld dat u wat handig ingesteld bent zijn er echter ook mogelijkheden om zelf meer of minder complexe add-ons voor SMS te maken. SMS biedt hier namelijk gewoon, een helaas wat slecht gedocumenteerde, interface voor en wel in de vorm van MIF (management information form).

Dit woord komt ook terug in de MIF editor die door Microsoft bij SMS wordt meegeleverd. Echt leuke dingen kunt u daar echter niet mee doen. Daarvoor moeten we met het serieuzere scriptwerk aan de gang.

Wat is die MIF interface nu precies?
MIF files zijn niets anders dan gewoon tekstfiles die met bepaalde coderingen informatie doorgeven aan de SMS server. Als we informatie aan willen leveren bij SMS, kunnen we dat op 2 manieren: als een NoidMIF en als een ISVMIF. (Independent Software Vendors MIF.)
Een NoidMIF bevat geen informatie over de gegevensarchitectuur waar de data in geplaatst moet worden en wordt gebruikt om hardware en software informatie door te geven van pc's die door SMS worden geïnventariseerd. SMS weet dan zelf voor welke architectuur de gegevens bestemd zijn. Door zo'n MIF te plaatsen in de SMS/noidMIFs directory op het werkstation kunnen we gegevens doorspelen. De gegevens worden dan in de inventory van het werkstation opgenomen.
Veel mooier is echter de ISVMIF. Hiermee kunnen we onze eigen gegevenstructuren in SMS creëren en zo waardevolle informatie toevoegen.

    Een praktijkvoorbeeld.
    Stel je hebt een groot bedrijf met veel servers en die servers hebben veel printers aan zich gebonden. Nou zou het handig zijn als we de printerinformatie uit de registry van de servers konden halen en die aan de SMS database toevoegen zodat we een actueel overzicht van ons printerbestand hebben.

    Om dit te bereiken moeten we het volgende doen:
    1. De registry uitlezen op zoek naar printerinformatie.
    2. Deze informatie aan een MIF file toevoegen.
    3. De MIF file doorsturen naar SMS.

    1. Het uitlezen.
    Hiervoor kunt u natuurlijk uw favoriete script voor gebruiken. Bijvoorbeeld kixtart, perl of XLNT.
    Elke taal heeft wel zo zijn mogelijkheden om specifieke key's uit de registry uit te lezen en deze vervolgens naar een file te exporteren. In ons voorbeeld maken we gebruik van kixtart. Een scripttaal die onder meer met de resourcekit wordt meegeleverd.

    2. informatie toevoegen aan een MIF
    Het volgende deel van het script schrijft voor elke gevonden printer een MIF file. Om de printer informatie makkelijk bereikbaar te maken wordt een SMS architectuur gecreëerd die lijkt op die van normale pc's waardoor de printers in dezelfde overzichten komen. Er wordt echter wel een nieuw systemtype gedefinieerd om onderscheid mogelijk te maken.
    Vervolgens wordt de relevante info in MIF-formaat weggeschreven.

    3. Het doorgeven van de informatie.
    De MIFfile kan aan SMS worden doorgegeven door deze in de ISVMIF directory van een SMS logonserver (een centrale server waar SMS clients mee communiceren) te plaatsen. Deze info is op elk werkstation in de SMS.INI terug te vinden dus deze kan makkelijk door het script achterhaald worden.

Zodra de informatie in de ISVMIF directory is gearriveerd zal SMS deze oppakken en verwerken. Het uiteindelijk resultaat ziet er dan zo uit:

En zo ziet u maar weer dat met wat relatief eenvoudige en goedkope handelingen u toch een prachtig overzicht in SMS tevoorschijn kunt toveren!

Bijlage:
Het kixscript wat printerinformatie ophaalt.

;Lokaliseren SMS.ini en uitlezen idmifspad
$smsdir=readprofilestring("c:\sms.ini","SMS","LastLogonServerPath") + "\ISVMIF.BOX"
$sitecode=readprofilestring("c:\sms.ini","SMS","SiteCode")
$Index = 1
:Loop1
$KeyName = ENUMKEY( "HKEY_LOCAL_MACHINE\SYSTEM\Currentcontrolset\control\print\printers" , $Index )

If @ERROR = 0
   $port = READVALUE("HKEY_LOCAL_MACHINE\SYSTEM\Currentcontrolset\control\print\printers\$keyname","port")
   $driver = READVALUE("HKEY_LOCAL_MACHINE\SYSTEM\Currentcontrolset\control\print\printers\$keyname","printer driver")
;Schrijven MIF
;File openen
if redirectoutput("$smsdir\$keyname.mif",1)=1
   ?"Fout bij openen mif"
endif

"Start Component"
?'    Name = "Printer"'
?'    Start Group'
?'       Name = "Identification"'
?'       ID = 1'
?'       Class = "MICROSOFT|IDENTIFICATION|1.0"'
?'       Start Attribute'
?'          Name = "Site"'
?'          ID = 1'
?'          Access = READ-ONLY'
?'          Storage = COMMON'
?'          Type = String(3)'
?'          Value = "$sitecode"'
?'       End Attribute'
?'       Start Attribute'
?'          Name = "Domain"'
?'          ID = 2'
?'          Access = READ-ONLY'
?'          Storage = COMMON'
?'          Type = String(15)'
?'          Value = "@DOMAIN"'
?'       End Attribute'
?'       Start Attribute'
?'          Name = "SystemType"'
?'          ID = 3'
?'          Access = READ-ONLY'
?'          Storage = COMMON'
?'          Type = String(50)'
?'          Value = "Printer"'
?'       End Attribute'
?'       Start Attribute'
?'          Name = "SystemRole"'
?'          ID = 4'
?'          Access = READ-ONLY'
?'          Storage = COMMON'
?'          Type = String(50)'
?'          Value = "Printer"'
?'       End Attribute'
?'       Start Attribute'
?'          Name = "Name"'
?'          ID = 5'
?'          Access = READ-ONLY'
?'          Storage = COMMON'
?'          Type = String(64)'
?'          Value = "$keyname"'
?'       End Attribute'
?'    End Group'
?'    Start Group'
?'       Name = "Architecture"'
?'       ID = 2'
?'       Class = "MICROSOFT|ARCHITECTURE|1.0"'
?'       Start Attribute'
?'          Name = "ArchitectureName"'
?'          ID = 1'
?'          Access = READ-ONLY'
?'          Storage = SPECIFIC'
?'          Type = String(10)'
?'          Value = "Printer"'
?'       End Attribute'
?'    End Group'
?'    Start Group'
?'       Name = "Printer gegevens"'
?'       ID = 3'
?'       Class = "MICROSOFT|EMPLOYEE STATUS|1.0"'
?'       Start Attribute'
?'          Name = "Netport"'
?'          ID = 1'
?'          Access = READ-ONLY'
?'          Storage = COMMON'
?'         Type = String(80)'
?'         Value = "$port"'
?'       End Attribute'
?"      Start Attribute"
?'          Name = "Printerdriver"'
?'          ID = 2'
?'          Access = READ-ONLY'
?'          Storage = COMMON'
?'          Type = String(40)'
?'          Value = "$driver"'
?'       End Attribute'
?"      Start Attribute"
?'         Name = "Server"'
?'         ID = 3'
?'         Access = READ-ONLY'
?'         Storage = COMMON'
?'         Type = String(40)'
?'         Value = "@WKSTA"'
?'       End Attribute'
?'    End Group'
?'END COMPONENT'
$Index = $Index + 1
goto Loop1
Endif


privacy policy