Windows - ADSI szkriptek készítése

ADSI 4. rész

forráskód letöltése
Az ADSI-ről (Active Directory Service Interface) szóló cikksorozatunk legújabb részében az eddig tanultak alkalmazása mellett néhány új technikát is elsajátítunk. Mai részünkben a felhasználói fiókokkal foglalkozunk. Megnézzük, hogy lehet őket létrehozni, listázni, törölni, tartományokban és munkacsoportokban egyaránt, mindezt kizárólag az ADSI segítségével.
Cikkünk mellékletében megtalálhatók az alábbi szkriptek:
"ListUsers.vbs" - Kilistázza az adott számítógép összes felhasználói fiókját. A futtatást javasoljuk parancssorban a CSCRIPT.EXE programmal elvégezni. Segítségül mellékeltünk egy "ListUsers.bat" batch fájlt, ami meghívja a CSCRIPT.EXE-t és a "ListUser.vbs"-t is.
"CreateUser.vbs" - Létrehoz egy "Teszt" nevű felhasználót.
"DeleteUser.vbs" - Törli az előző szkript által létrehozott "Teszt" felhasználót.
A műveletek elvégzése a "dorothy" nevű gépen történik. Más gépnevet a szkriptek első sorában található "Computer" változó értékének módosításával adhatunk meg
Az ADSI alapvetően a rendszergazdák eszköze. Ez megmutatkozik abban is, hogy csupán néhány sor begépelésével felhasználói fiókokat és csoportokat lehet létrehozni, törölni. Ciklusba helyezve a parancsokat, semmi akadálya több száz vagy több ezer művelet kötegelt elvégzésének sem. Nem akadály az sem, hogy munkacsoportos vagy Active Directory környezet áll-e rendelkezésünkre.
Felhasználók listázása
Vegyük előre a listázást. Számítógép fiókokat már listáztunk, lényegét tekintve a felhasználói fiók listázása is hasonlóan történik, csak nem a "computer", hanem a "user" objektum típusokra lesz szükségünk.
Adjuk meg, hogy melyik számítógépen tárolt felhasználókat akarjuk látni. Active Directory hálózatokban az egyik tartományvezérlő nevét írjuk ide. Nem kötelező a helyi gépnek lennie, mert az ADSI nem tesz különbséget helyi és távoli gép között. Egy fontos dolog van csupán: a szkriptet futtató felhasználónak elegendő jogosultsággal kell rendelkeznie a célgépen.
Computer="dorothy"
Hozzunk létre ADSI kapcsolatot a célgéppel, a már ismert módon.
Set myComputer = GetObject("WinNT://" & Computer & ",computer")
Az így elért objektumlistát szűrjük meg, hogy csak "user" objektumok látszanak.
myComputer.Filter = Array("user")
Jelenítsük meg egyenként a képernyőn a maradék objektumok (felhasználói fiókok) nevét (name tulajdonság).
For Each member In myComputer
    WScript.Echo member.Name
Next
Új felhasználó létrehozása
Cikksorozatunkban eddig nem szereplő technika bemutatása következik.
Ismét a szkript elején gyűjtsük össze változókban a szükséges adatokat: számítógépnév (Computer), bejelentkezési név (sUserName), felhasználó teljes neve (sFullName), fiók leírása (sDescription), jelszó (sPassword).
Computer = "dorothy"
sUserName =    "Teszt"
sFullName =    "ADSI Teszt Fiók"
sDescription = "Windows Software Online"
sPassword =    "adsi"
Létesítsünk kapcsolatot azzal a számítógéppel, amelyiken létre akarjuk hozni az új fiókot.
Set myComputer = GetObject("WinNT://" & Computer)
Most következik az újdonság: létre kell hoznunk egy új objektumpéldányt a meglévő sémához (adatszerkezethez) alkalmazkodva. A "Create" metódust tudjuk e célra használni. Paraméterként át kell adni a létrehozandó objektum típusát és megnevezését.
Set newUser = myComputer.Create("user", sUsername)
Majd egyesével be kell állítani a tulajdonságokat.
newUser.SetPassword sPassword 
newUser.FullName = sFullName
newUser.Description = sDescription
És eltárolni az új objektumot a névtérben.
newUser.SetInfo
Búcsúzóul megjelenítünk egy feliratot a képernyőn, ami azért is hasznos, mert így tudjuk, hogy mikor ért véget a szkript futása.
Wscript.Echo "Kész..."
Ha van a tartományban Exchange szerver, akkor automatikusan keletkezik egy felhasználóhoz rendelt postafiók is.
Meglévő felhasználói fiók törlése
Két adatra van szükségünk: melyik számítógép tárolja a fiókot (Computer) és mi a fiók bejelentkezési neve (UserName).
Computer = "dorothy"
UserName = "Teszt"
Létrehozzuk az objektumkapcsolatot az adott gép adott fiókjával.
Set myUser = GetObject("WinNT://" & Computer & "/" & UserName & ",user")
Hozzákapcsolódunk az objektumhoz, mint szülőhöz (parent) vagy tárolóhoz. Meghívjuk a "Delete" metódust a fiók törlésére. Végül üresre állítjuk a változó tartalmát (Nothing).
Set userParent = GetObject(myUser.Parent)
userParent.Delete "user", myUser.Name
Set myUser = Nothing
A szkript végén ismét egy felirat következik.
Wscript.Echo "Kész..."

ADSI cikksorozat