Windows - ADSI szkriptek készítése

ADSI 7. rész

forráskód letöltése
Cikksorozatunk legújabb részében az Active Directory szervezeti egységeivel foglalkozunk az ADSI (Active Directory Service Interface) szemszögéből. Megnézzük, hogy lehet szkriptekből létrehozni, tulajdonságokat szerkeszteni. Meglévő felhasználói fiókokat fogunk különböző szervezeti egységekbe átmozgatni illetve újakat hozunk létre egy megadott egységen belül. Mindezt az ADSI keretein belül maradva.
Cikkünkhöz mellékeltük az alábbiakban szereplő szkripteket:
"CreateOU.vbs" - Létrehoz egy új szervezeti egységet a zp.local tartományon belül "WSO" néven. Majd ezen belül egy újabb szervezeti egységet "Alegység" néven.
"MoveUsers.vbs" - A "Users" tárolóban lévő "User1" és "User2" felhasználói fiókokat átmozgatja az előző szkript által létrehozott szervezeti egységekbe. A két felhasználói fióknak létezni kell.
"NewUser.vbs" - Egy új felhasználói fiókot a "WSO" szervezeti egységen belül.
Mindhárom szkript a zp.local tartomány meglétét feltételezi. Felhasználásuk előtt módosítani kell szkripten belül a hivatkozásokat egy valós tartománynevet megadva.
Általában nem jellemző az ilyen és hasonló szkriptek közvetlenül a tartományvezérlőn történő futtatása. Ha egy másik gépen futtatjuk őket, a tényleges műveletek valójában az egyik tartományvezérlőn hajtódnak végre. Ennek viszont feltétele, hogy a felhasználó megfelelő jogosultsággal rendelkezzen, mind helyileg, mind a tartományvezérlőn. A megfelelő jogosultság jelen esetben a rendszergazdai jogokat jelenti. Esetleg lehet delegálás útján felhasználóknak jogkört adni a szervezeti egységek és felhasználók létrehozásához, módosításához.
Cikksorozatunkban eddig főként a "WinNT" interfészen keresztül hoztunk létre objektumkapcsolatokat. Most az "LDAP"-ot fogjuk használni, amely kifejezetten az LDAP protokollt ismerő címtárszolgáltatások számára készült. Az Active Directory ismeri az LDAP több verzióját is, úgyhogy szkriptjeinkben minden további nélkül használhatjuk.
Szervezeti egységek létrehozása
Vágjunk a közepébe és rögtön egy példa szkripten keresztül nézzük meg a létrehozás módját:
Elsőként csatlakozzunk a tartomány gyökérpontjához (példánkban: zp.local).
Set dom = GetObject("LDAP://dc=zp, dc=local")
Ezután létrehozunk egy új objektumot. Típusa: "organizationalUnit" - szervezeti egység. Neve: "WSO". A létrehozás helyét a szkript előző sora adja meg.
Set OU = dom.Create("organizationalUnit", "OU=WSO")
Beállítjuk néhány tulajdonságát: a leírás mező tartalmát "WSO Próbá"-ra. Ha rendelkezik a hálózat Exchange 2000 szerverrel, akkor automatikusan létrejön egy új postafiók is. Adjuk meg a szervezeti egységhez tartozó webcímet ("wwwHomePage" tulajdonság). Végül küldjük el az adatokat a tartományvezérlőnek (SetInfo).
OU.Put "description", "WSO Próba"
OU.Put "wwwHomePage", "http://www.softwareonline.hu"
OU.SetInfo
Ezzel gyakorlatilag létrejött az új szervezeti egység a tartomány gyökerében. Hogy tudunk ezen belül egy újabbat létrehozni? Változtassuk meg a gyökérpontot!
Set dom = GetObject("LDAP://ou=WSO, dc=zp, dc=local")
Majd ugyanúgy kell eljárnunk, mint az előbb.
Set OU = dom.Create("organizationalUnit", "OU=alegység")
OU.Put "description", "WSO Próba - alegység"
OU.Put "wwwHomePage", "http://www.softwareonline.hu"
OU.SetInfo
Utolsó lépésként megjelenítünk egy feliratot a képernyőn, hogy lássuk mikor ért véget a szkript futása.
Wscript.Echo "A szervezeti egység létrehozva."
Meglévő felhasználói fiókok áthelyezése szervezeti egységekbe
Határozzuk meg, hogy melyik szervezeti egységbe akarjuk áthelyezni a felhasználói fiókot.
Set dom = GetObject("LDAP://ou=WSO, dc=zp, dc=local")
Egy eddig nem használt metódus következik. Neve: "MoveHere". Paraméterként át kell adni a mozgatandó objektum nevét. Ha a forrás és a célnév megegyezik - tehát nem akarjuk átnevezni, akkor a második paraméterként a "vbNullString" értéket kell beírni. Ha az átnevezés mellett döntünk, akkor "vbNullString" helyett adjuk meg az objektum új nevét. Mozgassuk át a címtár "Users" tárolójában lévő "User1" fiókot a "WSO" szervezeti egységbe. Mielőtt futtatnánk a szkriptet gondoskodjunk róla, hogy a fiók létezzen, különben hibajelzést kapunk.
Set usr = dom.MoveHere("LDAP://CN=user1,CN=Users,DC=zp,DC=local", vbNullString)
Ezután mozgassuk át szintén a "Users" tárolóból a "User2" fiókot is, de ezúttal a "WSO"-n belüli "Alegység" nevű szervezeti egységbe. Figyeljük meg az LDAP hivatkozásban a megadási sorrendet.
Set dom = GetObject("LDAP://ou=alegység, ou=WSO, dc=zp, dc=local")
Set usr = dom.MoveHere("LDAP://CN=user2,CN=Users,DC=zp,DC=local", vbNullString)
Zárásként tájékoztassuk a szkript használóját, hogy megtörtént az áthelyezés.
Wscript.Echo "A felhasználók áthelyezve."
Új felhasználói fiókok létrehozása szervezeti egységeken belül
Felhasználói fiókot már hoztunk létre cikksorozatunk korábbi részeiben, ezért nem részletezzük a megvalósítás mikéntjét, csak két technikai érdekességre hívjuk fel a figyelmet.
Korábban azt mondtuk: "Hozzunk létre egy új fiókot ebben és ebben a tartományban". A fiók létrejött, méghozzá a tartomány "Users" tárolójában. De mi van, ha mi nem itt akarjuk elhelyezni? Megtehetjük, hogy a fenti módszerrel átmozgatjuk, de sokkal ésszerűbb, ha konkrétan megmondjuk a létrehozás helyét. Példánkban a "WSO" szervezeti egységet.
Set OU = GetObject("LDAP://OU=WSO,DC=zp,DC=local")
Set usr = OU.Create("user", "CN=Próba felhasználó")
usr.Put "samAccountName", "proba"
usr.Put "userPrincipalName", "proba@zp.local" 
usr.Put "title" "Ügyvezető igazgató"
usr.SetInfo
Állítsunk be további tulajdonságokat is. Joggal merülhet fel a kérdés, hogy miért nem tettük meg az előző "SetInfo" metódus előtt? Azért mert egyes tulajdonságok módosításához létezni kell az objektumnak. A fenti "SetInfo" létrehozza, míg az alábbi beállítja a további tulajdonságokat. Próbáljuk meg elhagyni az első "SetInfo"-t és hibajelzést kapunk, mert még nem létezik az objektum a jelszó beállításánál.
usr.SetPassword "abc123"
usr.AccountDisabled = False
usr.SetInfo
Wscript.echo "A felhasználó létrehozva."

ADSI cikksorozat