
A mellékelt példák használatához:
"ListGroups.vbs" - Tartományi környezetben kilistázza a képernyőre a felhasználókat. Indítását a "ListGroups.bat" batchfájllal hajtsuk végre.
"ListGroups.bat" - Elindítja a "ListGroups.vbs" szkriptet.
"ListWGGroups.vbs" - Munkacsoportos környezetben listázza ki a felhasználókat. Indítását a "ListWGGroups.bat" batchfájllal hajtsuk végre.
"ListWGGroups.bat" - Elindítja a "ListWGGroups.vbs" szkriptet.
"CreateGroup.vbs" - Létrehoz egy "Teszt" nevű csoportot a megadott tartományban.
"CreateWGGroup.vbs" - Létrehoz egy "Teszt" nevű csoportot a megadott munkacsoportban.
"DeleteGroup.vbs" - Törli az előbb létrehozott tartományi csoportot.
"AddUserToGroup.vbs" - Hozzáadja a "Teszt" nevű felhasználót az "Administrators" csoporthoz.
"RemoveUserFromGroup.vbs" - Eltávolítja a "Teszt" nevű felhasználót az "Administrators" csoportból.
A szkriptek felhasználása előtt az első sorokban lévő változókat (Computer, Domain, stb.) a helyi adottságoknak megfelelően módosítani kell.
Csoportok listázása
Annak érdekében, hogy ismét változtassunk egy kicsit a szkriptek létrehozásának technikáján, megint másként közelítünk a megoldáshoz, mint a korábbiakban és különbséget teszünk a munkacsoportok illetve tartományok között. Eddig minden esetben tartomány és tartományvezérlő nevet is megadtunk az objektumhivatkozásoknál (munkacsoportoknál szintén). Most megnézzük azt a lehetőséget is, amikor kihagyjuk a számítógép nevét és csak a tartomány névterére hivatkozva futtatjuk a szkriptet. Ilyenkor az a tartományvezérlő fogja kiszolgálni kérésünket, mely leghamarabb kapja meg.
Írjuk be a "Domain" változóba a tartomány teljes nevét.
Az ADSI objektumhivatkozásnál a "WinNT" ellátó után csupán ezt a nevet adjuk meg és ne pontosítsuk tovább az elérési utat.
Set myDomain = GetObject("WinNT://" & Domain)
Szűrjük meg a kapott eredményt a már ismer módon úgy, hogy csak a "group" osztályba tartozó objektumok maradjanak.
myDomain.Filter = Array("group")
Dolgozzuk fel a maradék adatokat: jelenítsük meg a képernyőn a csoportok nevét (name tulajdonság).
For Each group In myDomain
WScript.Echo group.Name
Next
Sajnos a módszer egy munkacsoport esetében nem működik, így ott megmaradunk a "WinNT://munkacsoport/gépnév" elérési formulánál. Vajon miért nem működik? Mert hiányzik a tartományokban meglévő központi nyilvántartás (címtár rendszer). Azzal, hogy egy munkacsoportban létre akarunk hozni valamit még nem mondtuk meg, hogy az konkrétan melyik gépen történjen - a keresésekre ugyanez vonatkozik. Ha az egyiken megtesszük, nem kerül át automatikusan egy másikra, ellentétben a tartomány központosított - egy helyen adminisztrálható - felépítésével, ahol gyakorlatilag mindegy, hogy melyik gépen ténykedünk, lényegében a tartományvezérlőt használjuk.
Adjuk meg a "Workgroup" változóba az elérendő munkacsoport nevét, majd a "Computer" változóba annak a számítógépnek a nevét, mely felhasználói csoportjait listázni szeretnénk.
Workgroup = "workgroup"
Computer = "dorothy"
A fenti adatok felhasználásával kapcsolódjunk a "WinNT" ellátón keresztül az adott géphez.
Set myDomain = GetObject("WinNT://" & Workgroup & "/" & Computer)
Szűrjük meg a visszakapott értéket, hogy csak a csoportokat jelentő objektumokat lássuk.
myDomain.Filter = Array("group")
Jelenítsük meg a megmaradt adatokat a képernyőn egy ciklussal végighaladva az összes elemen.
For Each group In myDomain
WScript.Echo group.Name
Next
Csoport létrehozása
Ismét különbséget teszünk a tartományi és a munkacsoportos létrehozás között, bár az utóbbi módszer működik az előbbiben is.
Nézzük elsőként a tartományi csoportok készítését.
Adjuk meg annak a tartománynak a nevét, ahol az új csoportot létre akarjuk hozni (Domain). Minimális adatként még meg kell adni a csoport nevét (sGroupName). Nem kötelező bár megadtuk a leírás tulajdonságot is (sDescription).
Domain = "microsoft.com"
sGroupName = "Teszt"
sDescription = "Windows Software Online"
Kapcsolódjunk a változóban szereplő tartományhoz az ADSI interfész segítségével a "WinNT" szolgáltatón keresztül. Kérésünket a legkevésbé foglalt - elsőként elérhető tartományvezérlő fogja kiszolgálni.
Set myComputer = GetObject("WinNT://" & Domain)
Létrehozunk egy új objektumot a "Create" metódussal. Típusa: "group", neve pedig az "sGroupName" változó értéke. Opcionálisan beállítjuk a Description tulajdonságot is.
Set newGroup = myComputer.Create("group", sGroupName)
newGroup.Description = sDescription
A létrehozás folyamata csak a "SetInfo" metódus futtatása után történik meg ténylegesen, így most ez következik.
Jelezve a felhasználó felé, hogy véget ért a szkript futása, megjelenítünk egy rövid szöveget.
Ha készítünk egy tartományban egy új csoport objektumot, joggal merülhet fel a kérdés, hogy vajon a címtár melyik tárolójában jön létre? Ott, ahol alapértelmezésben a többi is szerepel a "Users" tárolóban.
Ugyanez munkacsoportos környezetben annyival módosul, hogy meg kell adnunk egy gépet, amelyiken létrejön a csoport. Az ok ugyanaz, mint a listázásnál említett: nincs központi nyilvántartó rendszer, mely eljuttatja mindenhova az információt.
Használhatjuk az előző szkriptet, de az ADSI elérési utat kibővítjük a számítógép nevével (Computer).
Computer = "dorothy"
sGroupName = "Teszt"
sDescription = "Windows Software Online"
Set myComputer = GetObject("WinNT://" & Computer)
Set newGroup = myComputer.Create("group", sGroupName)
newGroup.Description = sDescription
newGroup.SetInfo
Wscript.Echo "Kész..."
Csoport törlése
Egyszerűsítsük le a törlést, amennyire csak lehet. Ha megadunk egy számítógépet, akkor mindegy, hogy tartományról vagy munkacsoportról van szó, a feladat végrehajtódik. Nem teszünk mást, mint a "WinNT" ellátón keresztül kapcsolódunk a "Computer" változóban lévő géphez és meghívjuk csoport (group) objektum "Delete" metódusát. Paraméterként a törlendő csoport nevét kell hozzáfűzni.
Computer = "dorothy"
sGroupName = "Teszt"
Set myComputer = GetObject("WinNT://" & Computer)
myComputer.Delete "group", sGroupName
Wscript.Echo "Kész..."
Felhasználók hozzáadása csoportokhoz
Szkriptünk működésének feltétele, hogy létező felhasználói fiókot rendeljünk létező csoporthoz. Ellenkező esetben hibajelzést kapunk.
Computer = "dorothy"
sGroup = "Administrators"
User = "Teszt"
Először kapcsolatot teremtünk a csoport, utána a felhasználói objektummal.
Set myGroup = GetObject("WinNT://" & Computer & "/" & sGroup & ",group")
Set myUser = GetObject("WinNT://" & Computer & "/" & User & ",user")
Majd a kettőt összekapcsoljuk az "Add" metódussal.
myGroup.Add(myUser.ADsPath)
Befejezésül jön a már ismert üzenet.
Felhasználók eltávolítása csoportból
Utolsó szkriptünk annyiban különbözik az előzőtől, hogy nem az "Add", hanem a "Remove" metódust kell használni.
Computer = "dorothy"
sGroup = "Administrators"
User = "Teszt"
Set myGroup = GetObject("WinNT://" & Computer & "/" & sGroup & ",group")
Set myUser = GetObject("WinNT://" & Computer & "/" & User & ",user")
myGroup.Remove(myUser.ADsPath)
Wscript.Echo "Kész..."