Windows - A Windows Management Instrumentation szolgáltatás elérése ASP oldalakról

WMI 6. rész

forráskód letöltése
Már többször írtunk a Windows Management Instrumentation (WMI) szolgáltatás rugalmasságáról. Programokból, szkriptekből könnyen elérhető, de nem csak ezek a lehetőségek léteznek. A Webkiszolgálók által generált aktív oldalak (Active Server Pages - ASP) szintén hozzáférhetnek a WMI-hoz. Így annak minden információját megjeleníthetjük dinamikusan a hozzáféréshez jogosult felhasználók számára. Cikkünkben lépésről lépésre bemutatjuk egy példán keresztül a megvalósítás módját.
Mellékelve megtalálható a cikkben szereplő ASP fájl neve "WMI.ASP" néven. Felhasználását az alábbiakban ismertetjük.
Először is mi az ASP? Szerver oldali szkript-környezet, segítségével dinamikusan lehet Weboldalakat generálni. A felhasználóval való interaktivitás megteremtésére két lehetőség létezik. Az egyik, amikor a felhasználó választásától függően megjelenik egy statikus HTML oldal. Ez csak a legegyszerűbb esetekben ad kielégítő eredményt. Képzeljük el azt az esetet, amikor egy adatbázisban való keresés után keletkező eredményt kell így megjeleníteni. Nyugodtan mondhatjuk rá, hogy ez lehetetlen. Másik megoldás, amikor valamilyen szerver oldali szkript nyelvet használunk és mintegy programozva jelenik meg az eredmény. A HTML oldalakat programból generáltatjuk, mindig az aktuális igényeknek megfelelően. Ezt a célt szolgálják a CGI, PHP, ASP szkriptek, de Delphi-ben vagy C#-ban is leprogramozhatjuk mindezt. Mi most egy ASP példát mutatunk be:
Az ASP oldalak előállítása közben használhatunk szkripteket. Cikksorozatunkban többször írtunk a WMI elérésére VBScript-eket. Tulajdonképpen nincs másról szó, mint ezeknek a szkripteknek az ASP-be ágyazásáról. De nem csak egy egyszerű másolásról van szó, némi átalakításra is szükség van. Nem kizárólagos a VBScript egyeduralkodása az ASP-ben, használhatunk JScript-et (*.js) is. Példánkban a WMI "Win32_NetworkAdapterConfiguration" osztályát fogjuk elérni és lekérjük a kiszolgáló IP címét, alapértelmezett átjárójának és DHCP szerverének IP címét. Az első lépés, hogy előállítsuk a megfelelő ASP fájlt. Indítsuk el a Jegyzettömb (Notepad) programot és kezdjünk neki:
Meg kell határozni, hogy milyen szkript nyelvet fogunk használni a fájlon belül és el kell készíteni egy a HTML dokumentumokkal megegyező szerkezetet. Adjunk az oldalnak nevet ("Windows Software Online példa"), ez az Internet Explorer fejlécében jelenik meg.
<%@ LANGUAGE="VBSCRIPT"%>
<HTML>
<HEAD>
<TITLE>Windows Software Online példa</TITLE>
</HEAD>
<BODY>
Ha bármikor hiba lép fel az oldal előállítása során, hagyjuk figyelmen kívül ("On error resume next"), mert majd a későbbiekben mi kezeljük le. A lekérdezés módja ugyanaz, mint amit a VBScript-ekben már láttunk. Az aktuálisan bejelentkezett felhasználó nevét és jelszavát fogjuk átadni a WMI szolgáltatásnak ("impersonationLevel=impersonate"). A lekérdezéshez ennek megfelelően megfelelő jogosultsági szint szükséges. Ilyennel a rendszergazdák rendelkeznek.
<%
On error resume next
set IPConfigSet = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery _
        ("SELECT * FROM Win32_NetworkAdapterConfiguration")
%>
A lekérdezés során hiba léphet fel. Ebben az esetben megjelenítünk egy hibaüzenetet. Egy hibát emelünk ki, ha nem megfelelő a jogosultsági szint (hibakód: -2147217405). Ekkor egy másik hibaüzenetet iratunk ki.
<%If Err <> 0 Then %>
    <%if err.number = -2147217405 then%>
        <p>Hozzáférés megtagadva. Önnek nincs megfelelő jogosultsága az adatok eléréséhez.</p>
    <%else%>
        <p>Hiba lépett fel a WMI lekérdezés során! Visszakapott megjegyzés: <%=Err.description%> hibakód <%=Err.number%></p>
    <%end if%>
<%end if %>
A kapott eredményt feldolgozva egy FOR ciklussal végignézzük az összes rekordot. Kiválasztjuk a "DHCPServer", "IPAddress" és "DefaultIPGateway" mezőket és megjelenítjük értékeiket, de csak abban az esetben, ha valóban tartalmaznak adatot ("Not IsNull"). Minden IP cím megjelenítésénél egy további FOR ciklust kell használnunk, mert nem csak egy hálózati adapter lehet a gépben.
    <p><B>A kiszolgáló paraméterei:</B></p>
<%for each IPConfig in IPConfigSet%>
    <%if Not IsNull(IPConfig.DHCPServer) then %>
        <%for i=LBound(IPConfig.DHCPServer) to UBound(IPConfig.DHCPServer)%>
            <p> DHCP kiszolgáló: <%=IPConfig.DHCPServer(i)%></p>
        <%next%>
    <%end if%>
    <%if Not IsNull(IPConfig.IPAddress) then %>
        <%for i=LBound(IPConfig.IPAddress) to UBound(IPConfig.IPAddress)%>
            <p> IP cím: <%=IPConfig.IPAddress(i)%></p>
        <%next%>
    <%end if%>
    <%if Not IsNull(IPConfig.IPAddress) then %>
        <%for i=LBound(IPConfig.DefaultIPGateway) to UBound(IPConfig.DefaultIPGateway)%>
            <p> Alapértelmezett átjáró: <%=IPConfig.DefaultIPGateway(i)%></p>
        <%next%>
    <%end if%>
<%next%>
Végül zárjuk a HTML tagokat, de előtte elvégzünk még egy hibaellenőrzést, hogy az adatmegjelenítés során nem lépett-e fel valamilyen probléma.
<%If Err <> 0 Then %>
        <p>Hiba lépett fel az adatmegjelenítés során! Visszakapott megjegyzés: <%=Err.description%> hibakód <%=Err.number%></p>
<%end if %>
</BODY>
</HTML>
Az így kapott dokumentumot mentsük el "WMI.asp" néven a Webszerver %systemroot%\inetpub\wwwroot könyvtárába. Indítsuk el a Felügyeleti eszközök > Internet szolgáltatáskezelő (Administrative Tools > Internet Services Manager) MMC konzolt. Válasszuk azt a Webhelyet, amelyiken kezelni akarjuk az ASP dokumentumot. Kattintsunk rá a jobb oldali egérgombbal és válasszuk a "Tulajdonságok" ("Properties") menüt. Be kell állítani, hogy a Webhely elérésekor a mi fájlunk töltődjön le a kliens gépére. Kattintsunk a "Dokumentumok" ("Documents") oldalra és győződjünk meg róla, hogy az "Alapértelmezett dokumentum engedélyezés" ("Enable Default Document") jelölőnégyzet aktivizálva van. Ezután kattintsunk a "Hozzáadás" ("Add") gombra és írjuk be a "WMI.asp" nevet, majd a nyilak segítségével mozgassuk a lista tetejére. A "Kezdőkönyvtár" ("Home Directory") oldalon kapcsoljuk be "A számítógép egy könyvtára" ("A directory located on this computer") rádiógombot és a "Helyi elérési út" ("Local Path") mezőbe írjuk be a "wwwroot" könyvtár elérési útját (általában: c:\inetpub\wwwroot). Következő lépés, hogy megadjuk a Webhely eléréséhez szükséges hozzáférési szintet. Nem használhatunk névtelen hozzáférést, mert nem fogjuk tudni elérni a WMI-t. A Windows nem engedélyezi a rendszeradatok elérését mindenkinek. Lépjünk a "Könyvtárbiztonság" ("Directory Security") oldalra és kattintsunk a "Névtelen hozzáférés és hitelesítés" ("Anonymouse access and authentication control") csoportban lévő "Szerkesztés" ("Edit") feliratú gombra.
Két dolgot kell itt állítani: kapcsoljuk ki a "Névtelen hozzáférés"-t ("Anonymous access") és kapcsoljuk be a "Beépített Windows hitelesítés" ("Integrated Windows authentication") jelölőnégyzeteket. A többi jelölőnégyzet maradjon kikapcsolt állapotban. Az "OK" gombokkal zárjuk be az ablakokat és lépjünk ki a konzolból.
Menjünk el az egyik kliens géphez, indítsuk el az Internet Explorer-t és kérjük le a Webszerver adott Weboldalát. Egy párbeszéd panel jelenik meg, ahol azonosítanunk kell magunkat (az oldal nem érhető el névtelenül). Adjuk meg a rendszergazdai felhasználói nevünket és jelszavunkat, majd kattintsunk az "OK" gombra. Működésbe lép az ASP fájlunk, lekérdezi az előírt adatokat a WMI-tól és megjeleníti az Explorer ablakban - ezzel végeztünk is.

WMI cikksorozat