Windows - ADSI szkriptek készítése

ADSI 1. rész

forráskód letöltése
Az ADSI (Active Directory Service Interface) a rendszergazdák eszköze. Még akkor is, ha használatához szükség van némi programozói ismeretre. Nevével ellentétben nem csak az Active Directory, hanem munkacsoportos hálózatok objektumai is kezelhetők. Néhány sor begépelésével megtudhatjuk, mely gépek vannak bekapcsolva a hálózaton, az adott felhasználó mikor jelentkezett be utoljára, meglévő beállításokon változtathatunk és még számos más rendszergazdák számára hasznos dolgot hajthatunk végre. Mindezt az úgynevezett ADSI szkriptek segítségével. Jelen résszel induló cikksorozatunkban végigvezetjük olvasóinkat az ADSI szkriptek készítésének alapjain, mindenhol konkrét példákon keresztül bemutatva a lehetőségeket.
Cikkünkhöz mellékeltünk egy szkriptet "ListProviders.vbs" néven, mely futtatása után megjeleníti az adott gépen elérhető ellátókat (a kifejezés magyarázata a cikkben található).
Az ADSI kifejezetten rendszergazdák számára készült segédeszköz. Programozási ismeretek birtokában könnyebb megérteni a szkriptek működésének lényegét, de a nyelvezet annyira le van egyszerűsítve, hogy nem feltétlenül igényel mélyebb programozói vagy rendszerismeretet. Szintaxisát tekintve lehet VBScript és JavaScript. Számolnunk kell viszont azzal, hogy nem áll rendelkezésre az összes Windows verzióban, mert kifejezetten az NT irányvonal eszközéről van szó, így a Windows NT/2000/XP/.NET verziókban található meg és nem érhető el Windows a 95/98/Me rendszerekben.
Célja, hogy a rendszergazdák által naponta végzendő adminisztratív feladatokat automatizálja. Ezeket rendszerint a "Felügyeleti eszközök" ("Administrative Tools") MMC konzoljain keresztül hajtják végre. Az ADSI teljes egészében objektumorientált programozást valósít meg. Mást nehéz is lenne a Windows NT és utódai által használt hierarchikus felépítésű környezetben. Bár az öröklődések és egyéb eljárások nem a szkripten belül definiált osztályokra vagy objektumokra vonatkoznak, hanem minden esetben az operációs rendszerre. Az ADSI szkriptek "csak" egy egyszerű, könnyen kezelhető programozási felületet biztosítanak a rendszerobjektumok eléréséhez. A háttérben egy jól kidogozott ADSI objektummodell áll. Képességei átnyúlnak a web alapokhoz, így ASP (Active Server Pages) oldalak elkészítésével szerveroldalon is igénybe vehetők.
Kapcsolatkialakítás
Az ADSI a rendszerobjektumokhoz egy interfészen keresztül kapcsolódik. A módszer elviekben összevethető az ODBC adatbázis kezeléssel, ahol a programok és az adatbázisok között egy köztes elem áll. Egyik oldalon a programhoz, másikon az adatbázishoz való kapcsolódás feltételei adottak. Ezzel kialakul egy közös felület, függetlenül az adatbázisoktól. A programozónak nem kell ismerni az adatbázis használatát, programja ugyanúgy használható MS SQL, Access vagy MySQL rendszereken. Ugyanez a helyzet az ADSI esetében is, létre kell hoznunk egy kapcsolatobjektumot és ezen keresztül lekérhetjük a felhasználók listáját, függetlenül attól, hogy munkacsoportos vagy Active Directory hálózatról van szó. Az ADSI interfészt ellátónak (provider) nevezi.
Nézzük meg milyen ellátók állnak rendelkezésünkre:
  • WinNT: Windows NT/2000/XP/.NET objektumokkal teremt kapcsolatot.
  • LDAP: LDAP szerverekhez kapcsolódik, mint az Exchange 5.x vagy a Windows 2000/.NET tartományvezérlők.
  • NDS: A Novell címtárrendszerét érhetjük el vele.
  • NWCOMPAT: Novell Netware kiszolgálókhoz kapcsolódik (Novell Netware 3.x).
  • IIS: Az Internet Information Services (IIS) kapcsolatokat kezeli.
Cikksorozatunkban a WinNT ellátót fogjuk ismertetni, mert ezzel érhetők el legszélesebb körben a Windows hálózatok.
Minden objektum elérésénél meg kell adnunk az ellátó - interfész nevét és ezen belül magának az objektumnak az elérési útját. Utóbbit a következő formában:
//Domain/Machine/Object,Class
Ahol a "Domain" az elérendő tartomány vagy munkacsoport neve. A "Machine" a gépnév. Az "Object,Class", pedig az objektumot és az osztályt jelenti.
Például a Microsoft tartomány, Bambi nevű gépén lévő Bob nevű felhasználóhoz tartozó objektumtulajdonságokat így lehet lekérdezni:
//Microsoft/Bambi/Bob,user
Ha nem akarunk ennyire részletekbe menő lekérdezést készíteni, hanem magának a számítógépnek az objektumaira van szükségünk, akkor elég csak a következőket beírni:
//Microsoft/Bambi
Ha az adott munkacsoport vagy tartomány összes objektumára vagyunk kíváncsiak, akkor pedig így néz ki az elérési út:
//Microsoft
Egy szkriptben mindez így néz ki:
Set MyObj = GetObject ("WinNT://Microsoft/Bambi/Bob,user")
A GetObject metódus teremti meg a kapcsolatot a paraméterként megadott ellátó és elérési út által leírt objektummal. Az eredmény a MyObj változóban jelenik meg. Később a MyObj-ra hivatkozva lehet elérni a "WinNT://Microsoft/Bambi/Bob,user" objektumot.
Objektum tulajdonságok
Az alapvető ADSI objektumok hat tulajdonsággal rendelkeznek:
  • Name = Objektumnév
  • Class = Objektumosztály
  • GUID = Az objektum globálisan egyedi azonosítója
  • ADsPath = Az objektum ADSI szintaxis szerinti elérési útja (lásd fent)
  • Parent = Szülő- vagy tárolóobjektum
  • Schema = A sémát (az objektum szerkezetét tárolja) leíró objektum elérési útja.
Ezen tulajdonságok a IADs nevű COM interfészből származnak.
Joggal merülhet fel a kérdés, hogy miért csak ennyi tulajdonság érhető el? Az ok a közös objektum független felületben keresendő. Lényege, hogy ezek a tulajdonságok minden objektumnál megtalálhatók, ami nem jelenti azt, hogy több nincs. Viszont a többi már egyedi: lehet, hogy az egyiknél szerepel, míg egy másiknál nem. Az is előfordulhat, hogy más néven található meg ugyanaz az adat.
Létezik még egy kapcsolat objektum, melyet az előbb nem említettünk, mert nem annyira gyakorlati jelentőségű. Neve: ADs. Az Active Directory vagy munkacsoportos hálózati hierarchia csúcsán áll. Feladata a névtér (namespace) ellátóinak tárolása. Írjunk egy rövid VBScript-et, mely megjeleníti az adott gépen elérhető ellátókat:
Set myADS = GetObject("ADs:")
For Each member In myADS
    WScript.Echo member.Name
Next
Futtatása után megjelennek sorban egymás után a fenti említett WinNT:, NWCOMPAT:, NDS:, LDAP:, IIS: ellátók. A szkriptben láthatunk egy példát a Name tulajdonság lekérdezésére.
A következő részben az itt elhangzottak felhasználásával fogunk szkripteket készíteni.

ADSI cikksorozat