
Cikkünkhöz mellékeltük az alábbiakban szereplő szkriptet "Join.vbs" néven. Egy Windows XP kliens gépen futtatva csatlakoztatja a gépet a megadott tartományhoz. Ehhez elsőként a szkript első sorába be kell írni a tartomány nevét, majd a második és harmadik sorba a művelet elvégzésére jogosult felhasználó nevét és jelszavát.
A szkriptet egy floppyn körbehordozva vagy egy hálózati megosztásba futtatva módosítja a hálózati beállításokat, átállítja a megadott tartományra, majd újraindítja a gépet. Tulajdonképpen elvégez mindet, amit ilyenkor a rendszergazda tesz, csupán futtatni kell. Fontos megemlíteni, hogy csak abban az esetben működik, ha a kliens gépen Windows XP operációs rendszer fut. Ennek az oka, hogy az XP-ben jelent meg a "Win32_ComputerSystem" osztályban a csatlakoztató metódus. Windows 2000 és korábbi rendszerekből ez hiányzik.
Lássuk neki a szkript ismertetésének:
Rögtön az elején változókban helyezztük el a csatlakozáshoz szükséges adatokat. Mik ezek?
- tartománynév (strDomain)
- csatlakoztatásra jogosult felhasználó neve (strUser)
- csatlakoztatásra jogosult felhasználó jelszava (strPassword)
Zárójelben a változó nevét tüntettük fel, ez természetesen módosítható.
strDomain = "microsoft"
strUser = "rendszergazda"
strPassword = "abc123"
Szükségünk van a kliens számítógép nevére is, de sokkal elegánsabb, ha ezt már nem változóval adjuk meg, hanem kiolvastatjuk a WMI (Windows Managemenet Instrumentation) szolgáltatással. A szépségen kívül gyakorlati haszon, hogy nem kell minden kliensen módosítani a szkript tartalmát, hanem ugyanazt változatlanul futtathatjuk a hálózat összes gépén. A számítógép nevet a "WScript.Network" objektum "ComputerName" tulajdonságából tudjuk meg. Kiolvasás után tároljuk el az strComputer változóba.
Set objNetwork = CreateObject("WScript.Network")
strComputer = objNetwork.ComputerName
Most következik a fent említett "Win32_ComputerSystem" osztályhoz való csatlakozás a helyi gépen - amit az strComputer változó jelöl. Helyileg az alapértelmezett WMI névtérben (\root\cimv2) található. Mindez az aktuálisan bejelentkezett felhasználó adataival történjen (impersonationLevel = Impersonate).
Set objComputer = GetObject ("winmgmts:{impersonationLevel = Impersonate}!\\" & strComputer & "\root\cimv2:Win32_ComputerSystem.Name = '" & strComputer & "'")
A szkript eddig egy Windows 2000-es gépen is futna, mert minden rendelkezésre áll a WMI-ban, amit felhasználtunk. De csak eddig, ugyanis most fogjuk meghívni a Windows XP-től (a .NET szerverekben is megtalálható) meglévő "JoinDomainOrWorkGroup" metódust. Paraméterezése elég érdekesen alakul: meg kell adni a tartomány nevet, a jogosult felhasználó jelszavát, felhasználói nevét. Utóbbit tartomány\név formában. Az utolsó 3-as paraméter a cikk végén található táblázat konstansainak összege. Hogy melyik konstansoké az minden esetben az elvégzendő művelettől függ.
ReturnValue = objComputer.JoinDomainOrWorkGroup(strDomain,strPassword,strDomain & "\" & strUser, NULL, 3)
A kapott visszatérési értéket nem kezeljük le, mert minél gyorsabban végezni akarunk a csatlakoztatással. Ha nincs hálózati kapcsolat, akkor úgysem fog sikerülni és hibaüzenetet kapunk. Utolsó lépésként újra kell indítani a gépet, amit szintén a WMI szolgáltatással tehetünk meg. Meg kell hívni a "Win32_OperatingSystem" osztály "Reboot" metódusát.
Set Reboot = GetObject("winmgmts:{(Shutdown)}//./root/cimv2").ExecQuery("select * from Win32_OperatingSystem where Primary=true")
for each OpSys in Reboot
OpSys.Reboot()
next
A "JoinDomainOrWorkGroup" osztály utolsó paramétere az alábbi konstansok összegéből állhat elő:
| Const_JOIN_DOMAIN |
1 |
| Const_ACCT_CREATE |
2 |
| Const_ACCT_DELETE |
4 |
| Const_WIN9X_UPGRADE |
16 |
| Const_DOMAIN_JOIN_IF_JOINED |
32 |
| Const_JOIN_UNSECURE |
64 |
| Const_MACHINE_PASSWORD_PASSED |
128 |
| Const_DEFERRED_SPN_SET |
256 |
| Const_INSTALL_INVOCATION |
262144 |