Az Acive Directory lehetővé teszi, hogy beállítsunk nyomtatókat felhasználói szinten. Készíthetünk login scriptet, ami beállítja a nyomtatót az adott OU-ban lévő felhasználóknak (GPO-t ugye OU-hoz lehet linkelni)
de
Mi van azokkal a renitensekkel, akik nem akarják felhasználói szinten beállítani a nyomtatót (mondjuk mert sűrűn változik a printer neve, helye) és mondjuk az OU struktúra sem teljesen fedi a valóságot valamiért? Úgy kell nekik, rendet kell tenni! Mondják most egy páran. Elvileg egyetértek, de mégis kell lennie megoldásnak.
Ez a megoldás pedig teljesen kézenfekvő: egy kicsit kiokosított login script kell, egy olyan ami kezeli a csoport tagságot. A scriptet a domain gyökeréhez kell linkelni. Ezzel megoldható, hogy csoporttagság alapján állítódjon be nyomtató a felhasználók gépein. (persze van más megoldás is)
Mellékesen, ez a módszer használható hálózati meghajtók csoporttagság szerinti csatolására is.
Íme a script (VB)
Option Explicit
On Error Resume Next
Dim objNetwork, objUser, CurrentUser,objFSO‘ Printer csoportok inicializalasa
‘————————-reszlegek——————————————-
Const printer1_csop = „cn=Marketing_printer”
Const printer2_csop = „cn=HR_printer”‘————————— userek + adminok———————————-
Const Users_Group = „cn=users”
Const Administrators_Group = „cn=administrators”‘———————-globalis objektumok inicializálása———————-
Set objNetwork = CreateObject(„WScript.Network”)
Set objFSO = CreateObject(„Scripting.FileSystemObject”)
‘user objektum inicializalas /futtato user megallapitasa
Set objUser = CreateObject(„ADSystemInfo”)
Set CurrentUser = GetObject(„LDAP://” & objUser.UserName)
‘——————–Eljarasok, fugvenyek————————————–
‘—Map network drive—
Sub MapDrive(sLetter, sUNC)
If (objFSO.DriveExists(sLetter) = False) Then
objNetwork.MapNetworkDrive sLetter, sUNC
End If
End Sub‘—set printer—
Sub SetPrinter(printerurl)
objNetwork.AddWindowsPrinterConnection printerurl
End Sub‘—set default printer—
Sub SetDefPrinter(defaultprinter)
objNetwork.SetDefaultPrinter defaultprinter
End Sub‘—Check group membership—
Function IsMemberOf(sGroupName)
Dim arrGroups,strGroup
arrGroups = CurrentUser.MemberOfIf IsEmpty(arrGroups) Then
strGroup = „”
ElseIf (TypeName(arrGroups) = „String”) Then
strGroup = LCase(arrGroups)
Else
strGroup = LCase(Join(CurrentUser.MemberOf))
End IfIf InStr(strGroup, lcase(sGroupName)) Then
IsMemberOf = True
Else
IsMemberOf = False
End If
End Function‘—-Map drives, set printers——————————————
‘———————————————————————-
If IsMemberOf(printer1_csop) Then
‘***Meghajtok***
MapDrive „o:”, „\nwtraders.msftrootshare1”
‘***Printerek***
SetPrinter „\printsrv1HP2100_1”
SetDefPrinter „\printsrv1HP2100_1”
End If‘———————————————————————–
If IsMemberOf(printer2_csop) Then
‘***Meghajtok***
‘***Printerek***
SetPrinter „\printsrv1HP4600_2”
SetDefPrinter „\printsrv1HP4600_2″
End If‘———–Adminok—————————————————–
If IsMemberOf(Administrators_Group) Then
‘WScript.Echo ” Administrator ”
‘***Meghajtok***
MapDrive „s:”, „\nwtraders.msftsysvol”
‘***Printerek***
End If
‘———————————————————————–
‘———–Minden felhasznalonak map N:————-
‘***Meghajtok***
MapDrive „n:”, „\nwtraders.msftroot”
‘***Printerek***WScript.Quit