
Cikkünkhöz mellékeltük az alábbiakban tárgyalásra kerülő szkriptet "MakeShare.vbs" néven. Futtatása csak tartományvezérlőn lehetséges, rendszergazdai jogosultsággal.
A módszer előnye, hogy minden felhasználó számára keletkezik egy saját mappa, ami fizikailag a kiszolgálón található. Ebbe mentheti a dokumentumait, leveleit, egyéb adatait. Ha rejtetté tesszük a többi felhasználó nem fogja látni. Minden mappa egy gyökérmappán belül található, például: c:\network\user1\, c:\network\user2\, c:\network\user3\. Rendszergazdai szemszögből ez azért előnyös mert csak a gyökérmappát (c:\network) kell menteni és meg van oldva a teljes hálózat összes felhasználójának komplett mentése. Persze nélkülözhetetlen, hogy a felhasználók fegyelmezettek legyenek és valóban a megfelelő helyre mentsenek.
Nézzük a megvalósítást lépéseit:
Készítünk egy eljárást, amely bekéri a gyökérmappa elérési útvonalát a "ParentDir" változóba. Ha nem létező mappát ad meg a szkript futtatója, akkor önmagát meghívva ismét bekéri, egészen addig, amíg megfelelő értéket nem kap.
Sub GetParentDir
ParentDir = InputBox("A megosztások gyökérmappája:", "Gyökérmappa", ParentDir)
If Not FS.FolderExists(ParentDir) Then
GetParentDir
End If
End Sub
Deklaráljunk néhány segédváltozót a munkánkhoz.
Dim WSHNetwork, WSHShell, FS, Domain, DomainObj, Computer, ShareServiceObj, ParentDir, Hidden, Drive
Mappákat a Windows Scripting Host (WSH), File System Object (FSO) osztályával lehet létrehozni. Kapcsolódjunk az FSO-hoz.
Set FS = CreateObject("Scripting.FileSystemObject")
Kiolvassuk a "WScript.Network" osztályból származtatott objektumból a helyi gép nevét ("WSHNetwork.ComputerName") és csatlakozunk az egyszerű fájlmegosztási szolgáltatáshoz ("LanManServer").
Set WSHNetwork = CreateObject("WScript.Network")
Set ShareServiceObj = GetObject("WinNT://" & WSHNetwork.ComputerName & "/LanManServer")
Ezután bekérjük a tartomány nevét és eltároljuk a "DomainName" változóba.
Domain = InputBox("Tartománynév:","Kérem az alábbi adatot","DomainName")
Most jön a szkript elején lévő eljárás indítása, a gyökérmappa (ParentDir változó) bekérése. Mielőtt meghívnánk adjunk egy kezdeti értéket a változónak ("C:\Users").
ParentDir = "C:\Users"
GetParentDir
Hogy tehetünk rejtetté egy megosztást? Zárjuk a nevét $ karakterrel. Például "Share$", "Download$", stb. Ekkor nem lesz látható a Windows Intézőben és az egyéb fájlkezelőkben sem, de hivatkozni ugyanúgy lehet rá a név ismeretében. Bízzuk a szkript futtatójára, hogy el akarja-e rejteni a megosztásokat.
Hidden = MsgBox("Legyenek rejtettek a megosztások?", 4, "Rejtett?")
Hidden = Hidden - 7
Már csak egyetlen adatra van szükségünk a hálózati meghajtó betűjelére, amit minden felhasználónál csatlakoztatunk.
Drive = InputBox("Milyen betűjellel legyen csatlakoztatva a hálózati meghajtó?", "Meghajtóbetűjel", "p:")
Az Active Directory elérésének egy egyszerű módját választjuk: a Windows NT-ből Windows 2000-be örökölt WinNT szolgáltatón keresztüli kapcsolódást. Induljunk ki a tartomány gyökeréből (//Domain) és nézzük végig az összes objektumot. Alkalmazzunk egy szűrést: csak a "User" típusok kellenek (minden felhasználói fiók "User" típusú).
Set DomainObj = GetObject("WinNT://" & Domain)
DomainObj.Filter = Array("User")
A kapott eredményt FOR ciklussal dolgozzuk fel az összes felhasználó esetében ellenőrizzük, hogy létezik-e bejelentkezési nevével egyező mappa a gyökérmappán belül. Ha igen lépjünk tovább. Ha nem hozzuk létre.
For Each UserObj in DomainObj
Dim ShareName
If Not FS.FolderExists(ParentDir & "\" & UserObj.Name) Then
FS.CreateFolder(ParentDir & "\" & UserObj.Name)
End If
Ugyanezen a néven osszuk meg a hálózatban (egyenlőre csak a "ShareName" változóba írjuk be) és amennyiben rejtetté kell tenni, fűzzük hozzá a névhez a $ jelet.
ShareName = UserObj.Name
If Hidden Then
ShareName = ShareName & "$"
End If
A megadott adatok alapján hozzuk létre a megosztás: Elérési útja megegyezik a "ParentDir" változóval. Egyszerre csak egy felhasználó számára engedélyezzük a hozzáférést (MaxUserCount = 1).
On Error Resume Next
Set NewShare = ShareServiceObj.Create("fileshare", ShareName)
If Not Err Then
NewShare.Path = ParentDir & "\" & UserObj.Name
NewShare.MaxUserCount = 1
NewShare.SetInfo
Utolsó lépésként írjuk be az Active Directory-ba az összes felhasználó tulajdonságlapjának "Profil" ("Profile") oldalára, hogy bejelentkezés után kezdőmappaként csatlakoztassa a nevével megegyező megosztást.
UserObj.HomeDirectory = "\\" & WSHNetwork.ComputerName & "\" & ShareName
UserObj.HomeDirDrive = Drive
UserObj.SetInfo
End If
Next
Jelezve a folyamat befejezését búcsúzzunk el.
MsgBox "Kész...",, "Viszlát!"