Windows - Az MMC 2.0 újdonságai programozók számára a gyakorlatban

forráskód letöltése
A Windows XP megjelenése óta elérhető a Microsoft Management Console (MMC) 2.0-s verziója. Cikkünkben azt nézzük meg, hogy milyen újdonságokat hozott az előző verziókhoz képest. Tesszük ezt úgy, hogy a fő hangsúlyt a programozási oldalra helyezzük, több osztály, objektum és metódus használatával, rövid bemutatásával. Egy konkrét példát fogunk megvalósítani VBScript-ből: az MMC konzolkeretbe betöltünk egy beépülő modult, láthatóvá tesszük, elmentjük, megváltoztatjuk a nézetét és fájlba exportáljuk a megjelenő adatokat.
Cikkünkhöz mellékeltük az alábbiakban tárgyalásra kerülő VBScript-et. Az "MMC_hun.vbs" magyar nyelvű Windows XP-n, míg az "MMC_eng.vbs" angol nyelvűn futtatható.
Mi az MMC?
Microsoft Management Console (MMC) egységesített kezelőfelület a konfigurációs és egyéb feladatokat ellátó beépülő modulok számára. Tulajdonképpen önmagában nem képes másra, mint alapot szolgáltatni a modulok működéséhez. Először a Windows 2000-ben került bevezetésre és célja, hogy összefogja a különböző beállító ablakokat egyetlen egységes felületté. Az ablakok ezután is elérhetők külön-külön, de kezelésük alapja minden esetben ugyanaz.
MMC 2.0
A 2.0-s verzió a Windows XP-ben jelent meg és a .NET szerverek is ezt fogják ismerni. Az újdonságok között az első és legfontosabb, hogy megnyílt az út a programozók előtt. VBScript, JScript, Visual Basic, C++, C#, Delphi és egyéb fejlesztői környezetekből biztosított az elérés az új osztályok révén.
Az új főosztály az "MMC20.Application" nevet viseli. Ezen belül számos objektum, tulajdonság és metódus található. Nézzünk meg egy konkrét VBScript példát. Elindítjuk az MMC konzol keretet szkriptből (egyenértékű a Start > Futtatás (Start > Run) menübe írt MMC paranccsal) és létrehozunk egy új "document" objektumot. A "document" jelöli a konzolkereten belüli beépülő modulokat és további metódusokat, illetve tulajdonságokat tartalmaz.
Set mmc= wscript.CreateObject("MMC20.Application")
Set console= mmc.document
Eddig minden a háttérben történt, ahhoz hogy látható legyen, szükségünk van a "Show" metódus meghívására.
mmc.Show
Ezzel elindult és láthatóvá vált az üres konzolkeret. Töltsük meg tartalommal: adjuk hozzá a "Szolgáltatások" ("Services") beépülő modult. A gond az, hogy a magyar nyelvű XP "Szolgáltatások"-ként ismeri, míg az angol "Services"-ként. Ezért két különböző kódra lesz szükségünk.
magyar verzió:
console.SnapIns.Add "Szolgáltatások" 
angol verzió:
console.SnapIns.Add "Services" 
Ha nem írunk többet, hanem futtatjuk a kódot, akkor elindul a konzolkeret. A "Szolgáltatások" ("Services") beépülő modul indulása előtt kapunk egy kérdést, hogy a helyi vagy egy másik gép szolgáltatásait akarjuk megjeleníteni. Válaszolunk rá és utána rögtön ki is lépne az MMC, de előtte megkérdezi, hogy menteni akarjuk-e a jelenlegi konzolt. Miért van ez? Mert nem tettük lehetővé a felhasználói hozzáférést - ez az alapértelmezés. Fűzzük hozzá a szkript végéhez a következő sort és nem záródik be az ablak.
mmc.UserControl = 1
A fentiekből látható, hogy igen egyszerű programozási eszközökkel is lehet eredményt elérni. Menjünk tovább: egyetlen paranccsal elmenthetjük az eddig elkészült konzolt egy általunk megadott helyre. Adjuk hozzá a szkript végéhez a következőt:
console.SaveAs("C:\Saját konzol.msc")
A mentés a háttérben történik. Ami a nézetet illeti, a fókuszt a kezelőpult gyökér kapta meg és a telepített szolgáltatásoknak csak a tárolója látszik, maguk a szolgáltatások nem. Bontsuk ki a faszerkezetet oly módon, hogy az ablak jobb oldalán legyen látható az összes szolgáltatás. Definiáljuk a "ScopeNamespace" objektumot, ami a megjelenítéssel kapcsolatos metódusokat tárolja. Állítsuk be a fókuszt az ablak bal oldalán úgy, hogy a szolgáltatások feliraton legyen. Ezt az "Item" metódussal tehetjük meg, paraméterként átadva, hogy hányadik elemen legyen - nekünk csak egy van, a szolgáltatások.
Set ScopeNamespace = console.ScopeNamespace
Set View = console.views.Item(1)
Le kell kérdeznünk, hogy mi található a faszerkezet kiindulópontjában (GetRoot metódus). Magyar verzió esetén a "Kezelőpultgyökér", angolnál a "Console Root" felirat. Ha megvan, akkor lépjünk ettől eggyel lejjebb (GetChild metódus). Végül tegyük a fókuszt arra a pontra, ahol most vagyunk (ActiveScopeNode metódus).
Set ConsoleRoot=ScopeNamespace.GetRoot
Set Services = ScopeNamespace.GetChild(ConsoleRoot)
View.ActiveScopeNode    = Services 
Futtassuk a szkriptet. Most már láthatók a telepített szolgáltatások. Az MMC konzolok sajátsága, hogy a megjelenített adatok szövegfájlba exportálhatók. Semmi akadálya, hogy ezt szkriptből is megtegyük. Hívjuk meg az "Exportlist" metódust és paraméterként adjuk meg a szövegfájl nevét és elérési útját:
View.Exportlist ("c:\Saját konzol.txt")
Drag and Drop
Folytassuk az újdonságok sorát a húzd és ejtsd (Drag and Drop) módszerrel, ami az előző verzióból kimaradt. Az MMC 1.x-ben az objektum áthelyezés úgy történt, hogy rá kellett kattintani a jobboldali egérgombbal és a megjelenő menüben az "Áthelyezés" ("Move") parancs után ki kellett jelölni az új helyet. Az MMC 2.0-tól kezdve teljes mértékben használható a húzd és ejtsd módszer a konzolon belül illetve a konzol és más Windows ablakok között is, de csak abban az esetben, ha az adott objektumnál engedélyezve van. Továbbá nem csak a mozgatás, hanem a másolás is lehetséges.
Új nézet
A konzol jobb oldalának listamezője kétféle nézetben jeleníthető meg: "Szabványos" ("Standard") és "Bővített" ("Extended"). Az előző az MMC 1.x-ben megszokott felsorolásszerű ábrázoláson túl más funkciót nem nyújt. Utóbbi viszont a Windows Intéző (Windows Explorer) megjelenítési módjához hasonlít.
Ha rákattintunk egy objektumra, akkor fajtájától függően információk és elérhető funkciók jelennek meg. Például a fenti szolgáltatásoknál maradva lehetővé válik egy leírás mező, illetve le lehet állítani és el lehet indítani az adott szolgáltatást. Ez így sokkal egyszerűbb, mint a menürendszerben több lépésben végrehajtani ugyanezt.

XML fájlformátum
A konzolok nem bináris, hanem XML formátumban tárolódnak a merevlemezen. Töltsük be az előbb mentett "Saját konzol.msc" fájlt a "Jegyzettömbbe" ("Notepad"). Alapvető dolgok különösebb XML jártasság nélkül is könnyen módosíthatók. A jól olvasható formátumnak köszönhetően például a "MinPosition", "MaxPosition", "Top", "Bottom", stb. értékek változtatásával változik a konzol elemeinek mérete, elhelyezkedése. Ennek ellenére a fejlesztők mégsem javasolják a fájlok közvetlen szerkesztését.