Windows - ADSI szkriptek készítése

ADSI 2. rész

forráskód letöltése
Múlt héten megismerkedtünk az ADSI szkriptek készítéséhez nélkülözhetetlen alapokkal. Most erre építve készítünk néhány újabb szkriptet. Cikkünkből megtudható, hogy az ADSI (Active Directory Service Interface) interfész felhasználásával hogyan lehet lekérdezi az objektumok tulajdonságait, milyen alapvető tulajdonságok léteznek és hogy lehet a kapott eredményt szűrni.
Mellékelten megtalálhatók az alábbi szkriptek:
"GetComputerProp.vbs" - Megjeleníti a megadott munkacsoport és gépnév által definiált objektum alapvető tulajdonságait.
"GetUserFullName.vbs" - A szkript "Computer" változója által megadott munkacsoportban vagy tartományban megjeleníti a "Username" változóban megadott felhasználó teljes nevét.
"ListAllComputers.vbs" - Készít egy listát a "Domain" változóban megadott munkacsoport vagy tartomány pillanatnyilag bekapcsolva lévő gépeiről.
A szkriptek futtatása előtt az említett változók tartalmát a helyi adottságoknak megfelelően módosítani kell. Amelyik szkripthez mellékeltünk ugyanolyan néven egy batch fájlt, ott javasoljuk azzal indítani a futtatást.
Objektumok alapvető tulajdonságainak lekérdezése
Az előző részben láthattuk, hogy melyik az a hat tulajdonság, mely rendelkezésünkre áll bármilyen objektumról is legyen szó. Első szkriptünkben kapcsolatot teremtünk egy adott munkacsoport gépével és megjelenítjük a képernyőn az alapvető tulajdonságainak értékét.
Hozzuk létre a kapcsolatot a WinNT ellátón keresztül a "workgroup" nevű munkacsoport "dorothy" nevű gépével. A gép a "computer" osztályba tartozik, mint minden számítógép. A tulajdonságokra "objektumnév.tulajdonság" formában lehet hivatkozni (például: myObj.Name).
Set myObj = GetObject("WinNT://workgroup/dorothy,computer")
WScript.Echo "Gépnév: " & myObj.Name
WScript.Echo "Osztály: " & myObj.Class
WScript.Echo "GUID: " & myObj.GUID
WScript.Echo "ADsPath: " & myObj.ADsPath
WScript.Echo "Szülő: " & myObj.Parent
WScript.Echo "Séma elérési útja: " & myObj.Schema
Futtassuk a fenti szkriptet parancssorból:
cscript szkriptnév.vbs
Azért parancssorból, mert a grafikus felületen minden Wscript.Echo utasítás külön ablakban jelenítené meg az eredményt. Könnyítésként készítettünk egy batch fájlt, ami az Intézőből is futtathatóvá teszi a szkriptet és nem kell parancssori utasítások kiadásával bajlódni (a fájl cikkmellékletünkben található).
Egyéb objektum tulajdonságok lekérdezése
Egy objektum a legritkább esetben áll csak ebből a hat tulajdonságból. Általában ennél jóval többről van szó. Az Active Directory-ban nem ritka a több tíz vagy több száz tulajdonság sem. Előállhatnak öröklődés útján, lehetnek egyediek és lehetnek felhasználók vagy programok által definiáltak is. Utóbbira példa az Exchange 2000 Server feltelepítése után végbemenő - a teljes rendszert érintő - változás. Új objektumok jelennek meg a címtárban és a meglévők további tulajdonságokkal egészülnek ki a program igényeinek megfelelően.
Szemléltessük mindezt egy példán keresztül:
Minden felhasználói fiókhoz tartozik egy teljes név. Megtekinthetjük és szerkeszthetjük nem tartományi tag gépeken a következő útvonalon: kattintsunk a "Sajátgép" ("My Computer") ikonra a jobboldali egérgombbal és lépjünk a "Kezelés" ("Manage") menüre. Megnyílik a "Számítógép-kezelés" ("Computer Management") MMC konzol. Ugyanide eljuthatunk a vezérlőpult segítségével is. A farendszerben keressük meg a "Helyi felhasználók és csoportok" ("Local Users and Groups") tárolót és lépjünk a "Felhasználók" ("Users") mappába. A konzol jobboldalán megjelennek a felhasználói fiókok. Válasszuk ki az egyiket és nézzük meg a tulajdonságait. Mindjárt az első oldalon láthatjuk a kérdéses "Teljes név" ("Full name") mezőt.
Active Directory tartományokban egy tartományvezérlő Felügyeleti eszközök > Active Directory - felhasználók és számítógépek (Administrative Tools > Active Directory Users and Computers) konzoljával lehet a fiókok tulajdonságait megjeleníteni.
Kérjük le és írassuk ki a képernyőre ezt a tulajdonságot az ADSI használatával.
Tároljuk el egy változóba a keresendő felhasználó bejelentkezési nevét.
Username = "rendszergazda"
És a számítógép nevet, mely a fiókot tárolja. Tartománynál az egyik tartományvezérlő nevét.
Computer = "dorothy"
Kapcsolódjunk a megadott gép, megadott felhasználói fiókjához.
Set myObj = GetObject("WinNT://" & Computer & "/" & UserName & ",user")
Írassuk ki a képernyőre a felhasználó teljes nevét.
WScript.Echo "A felhasználó teljes neve: " & myObj.FullName
Szűrések alkalmazása
Nem lehet minden esetben ennyire pontosan hivatkozni egy objektumra, mint tettük a fentiekben. Nézzük meg ismét egy példán keresztül, hogy mire gondolunk:
Célunk, hogy készítsünk egy listát a munkacsoport azon gépeiről, melyek a szkript futtatásakor be vannak kapcsolva.
Elsőként definiáljunk egy változót, melyben eltároljuk a munkacsoport (de lehet tartomány is) nevét.
Domain="workgroup"
A kapott információt a képernyőn fogjuk megjeleníteni. Készítsünk egy fejlécet a várható listához.
wscript.Echo "Pillanatnyilag elérhető gépek a hálózatban:"
wscript.Echo "-------------------------------------------"
Készítsünk egy újabb változót, mely segítségével megszámolhatjuk, hogy pillanatnyilag hány gép elérhető.
sorszam=1
Kapcsolódjunk a "Domain" változóban megadott munkacsoporthoz vagy tartományhoz. Semmi közelebbit nem tudunk megadni. Nem tudjuk a gépek nevét, csak azt, hogy számítógépek lévén a "computer" osztályba tartoznak. Itt rögtön szembesülünk egy problémával, történetesen az "objektum,osztály" szintaxis alkalmazhatatlanságával, ugyanis hiányzik az objektum (pontosabban ismeretlen). Ezért a következő formulát vagyunk kénytelenek használni:
Set OnlyDomain = GetObject("WinNT://"+Domain)
A szkript futásának ezen szakaszában az "OnlyDomain" változó a munkacsoportban elérhető összes objektumot jelenti, legyen az számítógép, felhasználói fiók, nyomtató vagy bármi más. Megtehetnénk, hogy egy ciklussal kiválogatjuk a "computer" osztályba tartozókat, de az ADSI ennél egyszerűbb. Alkalmazzuk a "Filter" nevű szűrőmetódust és dobjunk el minden objektumot, mely nem a "computer" osztályba tartozik.
OnlyDomain.Filter=Array("computer")
Most már jöhet egy ciklus. Szépen végignézetjük vele a megmaradt objektumokat és kiíratjuk a képernyőre a "Name" tulajdonságuk tartalmát. Közben ne felejtsük el egyesével növelni a sorszámot sem.
 For Each Computer in OnlyDomain
  Wscript.Echo sorszam & " " & Computer.Name
  sorszam=sorszam+1
 Next
Megjegyzés:
Egyidejűleg több szűrési feltétel megadás is lehetséges, például:
OnlyDomain.Filter=Array("computer", "user")
A szűrést megszüntetni egy üres sztring megadásával lehet:
OnlyDomain.Filter=Array("")
Következő részben a tulajdonságok szerkesztésével és az alkalmazható metódusokkal foglalkozunk.

ADSI cikksorozat