Link to home
Start Free TrialLog in
Avatar of tm9
tm9

asked on

Need VBS logon script to map drives and printers by user group

Hello,
First I am not a formal IT manager or network administrator, but in our company I am the most computer literate so I have been given the task of setting up our network.

I have read almost every post to this site regarding logon scripts, I have been able to implement several and at one time thought I had compiled enough snippets of code found here and other places to do exactly what I needed, well in short it didn’t work like it was suppose to. It worked but not by user groups.

Here is a little info about or environment.
We are on a domain let’s call it domain.local
Our Server is SBS 2003 Premium (I will be adding a second 2003 Standard Server soon)
We have 15 Client PC's all either XP or 2000 with current service packs.
20 or so users, all users with roaming profiles.
All users are given local Administrative rights due to some software requirements.  This is done on each client PC in the local policy.
Im sure there is a way around this possibley to start the program with runas\user but I will tackle that later unless it is absolutly relevant
to this request.

6 Security Groups I have created and distributed to users to use the log on script I am trying to create.

Administrators
Managers
Accounting
Design
Design East (for mapping printers only)
Design West (for mapping printers only)

Before I go any further I am wanting this in VB, I don’t want to use Kixart or Bat files unless this just can’t be done in VB script but i am pretty sure it can.

What I am wanting is a logon script to do the following
_______________________________________________________

1. Clear the below drive letters if already mapped

2. Map drives per group
 a. The first group could be all domain users
 Map Drive F to \\server\public
 Map Drive G to \\server\Office Documents

 b. The second group Administrators
 Map Drive H to \\Server\admin tools
 Map Drive I to \\Server\all shares

 c. The third group Managers
 Map Drive J to \\Server\Managers
 Map Drive L to \\Server\Customers

 d. The fourth group Accounting
 Map Drive K to \\Server\Accounting
 Map Drive L to \\Server\Customers

 e. The fifth group Design
 Map Drive M to \\Server\Drawings
 Map Drive N to \\Server\Forms

3. I would also like it to map to the logged in users folder.
 Map Drive Z to \\server\users\%username

4. Map Printers by group
 a. Group Accounting
 Connect Printer1 \\server\acounting
 Connect Printer2 \\ server\invoice printer
 Connect Printer3 \\ server\check printer
 Set printer 1 as default

 b. Group Design East
 Connect Printer1 \\server\Design East
 Connect Printer2 \\ server\Plotter
 Set printer 1 as default


 c. Group Design West
 Connect Printer1 \\server\Design West
 Connect Printer2 \\ server\Plotter
 Set printer 1 as default

By defaults SBS sets up all users to use
SBS_LOGIN_SCRIPT.bat

it contains the following.
\\SERVER\Clients\Setup\setup.exe /s SERVER

Can this VB script be referenced by this batch file or can this line be added to the new VB script and then I change users to use the new logon.vbs file instead of SBS_LOGIN_SCRIPT.bat
___________________________________________________________

Please give specific instructions in simplistic terms
I would prefer you just write the code for copy/edit/paste, i've already spent way to much time on it.

Thank you
Avatar of Fatal_Exception
Fatal_Exception
Flag of United States of America image

I really don't have time to research the script, but I will suggest that the command you will need to implement here is the ifmember command, used in scripts to query the group memberships...  I don't expect any points to be awarded for this, but it may help...  :)

Ifmember.exe

http://www.microsoft.com/windows2000/techinfo/reskit/tools/new/ifmember-o.asp
Avatar of rhrowson
rhrowson

Kix has the facilities you ewant and has been desighned for this sort of thing. Thew command syntax is a damned site easier than a lot of things I have used. For help, do a Google search for Kix scripts
Avatar of tm9

ASKER


I was aware of both, like I said earlier I have read every post on this site
regarding log on scripts. Ive also googled it to death.
I think it must be something simple, or maybe I am just a little to dense to get it.

Anyways below is what I have so far, It all works except for not by group
all users, regardless of what group they belong to get All drives mapped.
That doesent mean they have permissions but they are mapped.

My script logon.vbs is here \\Server\netlogon

Also in that folder are these 2 files
con2prt.exe
IFMEMBER.EXE

_______________________logon.vbs__________________________
on error resume next
Dim WshNetwork
Set WshNetwork = CreateObject("WScript.Network")

If IsMember(WshNetwork.username, "Domain Admin") Then
wshnetwork.MapNetworkDrive "m:", "\\Server\Office Documents"
wshnetwork.MapNetworkDrive "n:", "\\Server\Admin Tools"
wshnetwork.MapNetworkDrive "o:", "\\Server\Ghost Images"
wshnetwork.MapNetworkDrive "p:", "\\Server\Job Pictures"

If IsMember(WshNetwork.username, "Domain Users") Then
wshnetwork.MapNetworkDrive "m:", "\\Server\Office Documents"
wshnetwork.MapNetworkDrive "p:", "\\Server\Job Pictures"
wshnetwork.MapNetworkDrive "r:", "\\Server\Drawings"
End If

If IsMember(WshNetwork.username, "Domain Admin") Then
PrinterPath = "\\server\chris"
PrinterPath2 = "\\server\lazerjet"
WshNetwork.AddWindowsPrinterConnection PrinterPath
WshNetwork.SetDefaultPrinter PrinterPath2
End If

Shell ("\\SERVER\Clients\Setup\setup.exe /s SERVER")

________________________________________________________

The drives map to all users regardless of group membership.
Printers all map regardless of membership.

I dont know if the Shell line is valid or not.

If I could get this example to work by group I could edit it to add
my 6 groups mentioned in origional post.

Thanks again.
Avatar of tm9

ASKER

Ok, I have scapped the above scripts and have the below working,
I would like this script to check each users membership in the groups and map drives or printers for multiple memberships.
At present if you belong to the Admin group it stops there.

I will award the points to anyone that can solve that.

Much kudos to Guy Thomas http://computerperformance.co.uk/ 
where i found most of the code below.

'------------------------logon.vbs--------------------------------
Option Explicit
Dim objNetwork, objUser, CurrentUser
Dim strGroup

Const Admin_Group = "cn=oly_users_admin"
Const Managers_Group = "cn=oly_users_manager"
Const Accounting_Group = "oly_users_accounting"
Const Estimate_Group = "cn=oly_users_estimate"
Const Design_East_Group = "cn=oly_design_east"
Const Design_West_Group = "cn=oly_design_west"
Const All_Users_Group = "cn=oly_users_all"

Set objNetwork = CreateObject("WScript.Network")
' Forces script to skip errors (rem below line to see errors)
on error resume next

Dim WshNetwork
Set WshNetwork = WScript.CreateObject("WScript.Network")
' Set all drives to be removed here.
WshNetwork.RemoveNetworkDrive "m:"
WshNetwork.RemoveNetworkDrive "n:"
WshNetwork.RemoveNetworkDrive "o:"
WshNetwork.RemoveNetworkDrive "p:"
WshNetwork.RemoveNetworkDrive "q:"
WshNetwork.RemoveNetworkDrive "r:"
WshNetwork.RemoveNetworkDrive "s:"
WshNetwork.RemoveNetworkDrive "t:"
WshNetwork.RemoveNetworkDrive "u:"
WshNetwork.RemoveNetworkDrive "v:"
WshNetwork.RemoveNetworkDrive "w:"
WshNetwork.RemoveNetworkDrive "x:"
WshNetwork.RemoveNetworkDrive "y:"
WshNetwork.RemoveNetworkDrive "z:"

Set objUser = CreateObject("ADSystemInfo")
Set CurrentUser = GetObject("LDAP://" & objUser.UserName)
strGroup = LCase(Join(CurrentUser.MemberOf))

If InStr(strGroup, Admin_Group) Then
WScript.Echo "You are logged into the Admin Group "
 objNetwork.MapNetworkDrive "m:", "\\olysbs\slg shared "
 objNetwork.MapNetworkDrive "n:", "\\server\drawings"
 objNetwork.MapNetworkDrive "o:", "\\olysbs\job costing"
 objNetwork.MapNetworkDrive "p:", "\\olysbs\slg"
 objNetwork.MapNetworkDrive "q:", "\\server\catalouges"
 objNetwork.MapNetworkDrive "r:", "\\server\job photos"
 objNetwork.MapNetworkDrive "s:", "\\server\slic"
 objNetwork.MapNetworkDrive "t:", "\\olysbs\office documents"
 objNetwork.MapNetworkDrive "u:", "\\olysbs\hr"
 objNetwork.MapNetworkDrive "v:", "\\olysbs\manager"
 objNetwork.MapNetworkDrive "w:", "\\olysbs\accounting"
 objNetwork.MapNetworkDrive "x:", "\\server\sprink slick"
 objNetwork.MapNetworkDrive "y:", "\\server\public"
 objNetwork.MapNetworkDrive "z:", "\\olysbs\Users\" _
 & objNetwork.UserName

 
Dim net
Set net = CreateObject("WScript.Network")
net.AddWindowsPrinterConnection "\\olysbs\chris", "Chris's Printer"
net.AddWindowsPrinterConnection "\\olysbs\frank", "Frank's Printer"
net.AddWindowsPrinterConnection "\\olysbs\shop", "Shop Printer"
net.AddWindowsPrinterConnection "\\olysbs\11x17", "11x17 Printer"
net.AddWindowsPrinterConnection "\\olysbs\invoice1", "Main Invoice Printer"
net.AddWindowsPrinterConnection "\\olysbs\invoice2", "BU Invoice Printer"
net.AddWindowsPrinterConnection "\\olysbs\office", "Main Office Printer"
net.AddWindowsPrinterConnection "\\server\design east", "Design East"
net.AddWindowsPrinterConnection "\\server\design east", "Design West"
net.AddWindowsPrinterConnection "\\server\lee", "Lee's Printer"
'Removed the below line because if I log into another users workstation it set this as default printer for them if one is not set
'net.SetDefaultPrinter "\\olysbs\chris"
 
 
 
 
ElseIf InStr(strGroup, Managers_Group) Then
WScript.Echo " You are logged into the Managers Group " 
 objNetwork.MapNetworkDrive "m:", "\\olysbs\slg shared "
 objNetwork.MapNetworkDrive "o:", "\\olysbs\job costing"
 objNetwork.MapNetworkDrive "q:", "\\server\catalouges"
 objNetwork.MapNetworkDrive "r:", "\\server\job photos"
 objNetwork.MapNetworkDrive "t:", "\\olysbs\office documents"
 objNetwork.MapNetworkDrive "v:", "\\olysbs\manager"
 objNetwork.MapNetworkDrive "y:", "\\server\public"
 objNetwork.MapNetworkDrive "z:", "\\olysbs\Users\" _
 & objNetwork.UserName

 

Set net = CreateObject("WScript.Network")
net.AddWindowsPrinterConnection "\\olysbs\chris", "Chris's Printer"
net.AddWindowsPrinterConnection "\\olysbs\frank", "Frank's Printer"
net.AddWindowsPrinterConnection "\\olysbs\shop", "Shop Printer"
net.AddWindowsPrinterConnection "\\olysbs\11x17", "11x17 Printer"
net.AddWindowsPrinterConnection "\\olysbs\invoice1", "Main Invoice Printer"
net.AddWindowsPrinterConnection "\\olysbs\invoice2", "BU Invoice Printer"
net.AddWindowsPrinterConnection "\\olysbs\office", "Main Office Printer"
net.AddWindowsPrinterConnection "\\server\design east", "Design East"
net.AddWindowsPrinterConnection "\\server\design east", "Design West"
net.AddWindowsPrinterConnection "\\server\lee", "Lee's Printer"


ElseIf InStr(strGroup, Estimate_Group) Then
WScript.Echo " You are logged into the Estimators Group " 
 objNetwork.MapNetworkDrive "m:", "\\olysbs\slg shared "
 objNetwork.MapNetworkDrive "n:", "\\server\drawings"
 objNetwork.MapNetworkDrive "o:", "\\olysbs\job costing"
 objNetwork.MapNetworkDrive "q:", "\\server\catalouges"
 objNetwork.MapNetworkDrive "r:", "\\server\job photos"
 objNetwork.MapNetworkDrive "t:", "\\olysbs\office documents"
 objNetwork.MapNetworkDrive "y:", "\\server\public"
 objNetwork.MapNetworkDrive "z:", "\\olysbs\Users\" _
 & objNetwork.UserName

 

Set net = CreateObject("WScript.Network")
net.AddWindowsPrinterConnection "\\olysbs\chris", "Chris's Printer"
net.AddWindowsPrinterConnection "\\olysbs\frank", "Frank's Printer"
net.AddWindowsPrinterConnection "\\olysbs\shop", "Shop Printer"
net.AddWindowsPrinterConnection "\\olysbs\11x17", "11x17 Printer"
net.AddWindowsPrinterConnection "\\olysbs\invoice1", "Main Invoice Printer"
net.AddWindowsPrinterConnection "\\olysbs\invoice2", "BU Invoice Printer"
net.AddWindowsPrinterConnection "\\olysbs\office", "Main Office Printer"
net.AddWindowsPrinterConnection "\\server\design east", "Design East"
net.AddWindowsPrinterConnection "\\server\design east", "Design West"
net.AddWindowsPrinterConnection "\\server\lee", "Lee's Printer"

 
 
 
ElseIf InStr(strGroup, Design_East_Group) Then
WScript.Echo "You are logged into the Design East Group " & strGroup
 objNetwork.MapNetworkDrive "n:", "\\server\drawings"
 objNetwork.MapNetworkDrive "q:", "\\server\catalouges"
 objNetwork.MapNetworkDrive "r:", "\\server\job photos"
 objNetwork.MapNetworkDrive "t:", "\\olysbs\office documents"
 objNetwork.MapNetworkDrive "x:", "\\server\sprink slick"
 objNetwork.MapNetworkDrive "y:", "\\server\public"
 objNetwork.MapNetworkDrive "z:", "\\olysbs\Users\" _
 & objNetwork.UserName

 

Set net = CreateObject("WScript.Network")
net.AddWindowsPrinterConnection "\\olysbs\chris", "Chris's Printer"
net.AddWindowsPrinterConnection "\\olysbs\frank", "Frank's Printer"
net.AddWindowsPrinterConnection "\\olysbs\shop", "Shop Printer"
net.AddWindowsPrinterConnection "\\olysbs\11x17", "11x17 Printer"
net.AddWindowsPrinterConnection "\\olysbs\invoice1", "Main Invoice Printer"
net.AddWindowsPrinterConnection "\\olysbs\invoice2", "BU Invoice Printer"
net.AddWindowsPrinterConnection "\\olysbs\office", "Main Office Printer"
net.AddWindowsPrinterConnection "\\server\design east", "Design East"
net.AddWindowsPrinterConnection "\\server\design east", "Design West"
net.AddWindowsPrinterConnection "\\server\lee", "Lee's Printer"
net.SetDefaultPrinter "\\olysbs\design east"
 
 
ElseIf InStr(strGroup, Design_West_Group) Then
WScript.Echo "You are logged into the Design West Group " & strGroup
 objNetwork.MapNetworkDrive "n:", "\\server\drawings"
 objNetwork.MapNetworkDrive "q:", "\\server\catalouges"
 objNetwork.MapNetworkDrive "r:", "\\server\job photos"
 objNetwork.MapNetworkDrive "t:", "\\olysbs\office documents"
 objNetwork.MapNetworkDrive "x:", "\\server\sprink slick"
 objNetwork.MapNetworkDrive "y:", "\\server\public"
 objNetwork.MapNetworkDrive "z:", "\\olysbs\Users\" _
 & objNetwork.UserName

 

Set net = CreateObject("WScript.Network")
net.AddWindowsPrinterConnection "\\olysbs\chris", "Chris's Printer"
net.AddWindowsPrinterConnection "\\olysbs\frank", "Frank's Printer"
net.AddWindowsPrinterConnection "\\olysbs\shop", "Shop Printer"
net.AddWindowsPrinterConnection "\\olysbs\11x17", "11x17 Printer"
net.AddWindowsPrinterConnection "\\olysbs\invoice1", "Main Invoice Printer"
net.AddWindowsPrinterConnection "\\olysbs\invoice2", "BU Invoice Printer"
net.AddWindowsPrinterConnection "\\olysbs\office", "Main Office Printer"
net.AddWindowsPrinterConnection "\\server\design east", "Design East"
net.AddWindowsPrinterConnection "\\server\design east", "Design West"
net.AddWindowsPrinterConnection "\\server\lee", "Lee's Printer"
net.SetDefaultPrinter "\\olysbs\design west"

'Remove rem for shares to all users
'ElseIf InStr(strGroup, All_Users_Group) Then
'WScript.Echo "All Users Group " & strGroup
' objNetwork.MapNetworkDrive "h:", "\\Another Server\Users\" _
' & objNetwork.UserName

End If
Wscript.Echo "Drives & Printers have been mapped for your group "

WScript.Quit
' End of Script.


'Below is only for refference for writing script

'Company Drives
'A Saved for Local
'B Saved for Local
'C Saved for Local
'D Saved for Local
'E Saved for Local
'F Saved for Local
'G Saved for Local
'H Open
'I Open
'J Open
'k Open
'L Open
'M \\olysbs\slg shared
'N \\server\drawings
'O \\olysbs\job costing
'P \\olysbs\slg
'Q \\server\catalouges
'R \\server\job photos
'S \\server\slic
'T \\olysbs\office documents
'U \\olysbs\hr
'V \\olysbs\manager
'W \\olysbs\accounting
'X \\server\sprink slick
'Y \\server\public
'Z \\olysbs\users\%username

'Company Printers
'\\olysbs\chris
'\\olysbs\frank
'\\olysbs\shop
'\\olysbs\main
'\\olysbs\11x17
'\\server\design east
'\\server\design west
'\\server\plotter
'\\server\lee

'---------------------------------end logon.vbs---------------------------
Avatar of Dirk Haest
It seems like a problem in your if structure..
Now you have something like this:
if Const Admin_Group  ...
elsif Const Managers_Group ...
elseIf Const Accounting_Group ...
...
end if.

It will always run for 1 group only. If you want to make sure it works for every group then you'll have to change your if-structure to :

if Const Admin_Group  ...
end if
if Const Managers_Group  ...
end if
There's a lot of overhead in your code....

Option Explicit
Dim objNetwork, objUser, CurrentUser
Dim strGroup

Const Admin_Group = "cn=oly_users_admin"
Const Managers_Group = "cn=oly_users_manager"
Const Accounting_Group = "oly_users_accounting"
Const Estimate_Group = "cn=oly_users_estimate"
Const Design_East_Group = "cn=oly_design_east"
Const Design_West_Group = "cn=oly_design_west"
Const All_Users_Group = "cn=oly_users_all"

Set objNetwork = CreateObject("WScript.Network")
' Forces script to skip errors (rem below line to see errors)
on error resume next

Dim WshNetwork
Set WshNetwork = WScript.CreateObject("WScript.Network")
' Set all drives to be removed here.
WshNetwork.RemoveNetworkDrive "m:"
WshNetwork.RemoveNetworkDrive "n:"
WshNetwork.RemoveNetworkDrive "o:"
WshNetwork.RemoveNetworkDrive "p:"
WshNetwork.RemoveNetworkDrive "q:"
WshNetwork.RemoveNetworkDrive "r:"
WshNetwork.RemoveNetworkDrive "s:"
WshNetwork.RemoveNetworkDrive "t:"
WshNetwork.RemoveNetworkDrive "u:"
WshNetwork.RemoveNetworkDrive "v:"
WshNetwork.RemoveNetworkDrive "w:"
WshNetwork.RemoveNetworkDrive "x:"
WshNetwork.RemoveNetworkDrive "y:"
WshNetwork.RemoveNetworkDrive "z:"

Set objUser = CreateObject("ADSystemInfo")
Set CurrentUser = GetObject("LDAP://" & objUser.UserName)
strGroup = LCase(Join(CurrentUser.MemberOf))

' SETTING ALL NETWORKDRIVES THAT ARE AVAILABLE FOR EVERY USER
objNetwork.MapNetworkDrive "q:", "\\server\catalouges"
 objNetwork.MapNetworkDrive "r:", "\\server\job photos"
 objNetwork.MapNetworkDrive "t:", "\\olysbs\office documents"
 objNetwork.MapNetworkDrive "y:", "\\server\public"
 objNetwork.MapNetworkDrive "z:", "\\olysbs\Users\"  & objNetwork.UserName

' SETTING THE PRINTERS, APPARANTLY FOR EVERYONE THE SAME !
Set net = CreateObject("WScript.Network")
net.AddWindowsPrinterConnection "\\olysbs\chris", "Chris's Printer"
net.AddWindowsPrinterConnection "\\olysbs\frank", "Frank's Printer"
net.AddWindowsPrinterConnection "\\olysbs\shop", "Shop Printer"
net.AddWindowsPrinterConnection "\\olysbs\11x17", "11x17 Printer"
net.AddWindowsPrinterConnection "\\olysbs\invoice1", "Main Invoice Printer"
net.AddWindowsPrinterConnection "\\olysbs\invoice2", "BU Invoice Printer"
net.AddWindowsPrinterConnection "\\olysbs\office", "Main Office Printer"
net.AddWindowsPrinterConnection "\\server\design east", "Design East"
net.AddWindowsPrinterConnection "\\server\design east", "Design West"
net.AddWindowsPrinterConnection "\\server\lee", "Lee's Printer"

' EXTRA DRIVES FOR SPECIFIC GROUP

if InStr(strGroup, Admin_Group) or instr(strGrooup, Managars_Group) or instr(strGrooup, Estimate_Group) then
   objNetwork.MapNetworkDrive "m:", "\\olysbs\slg shared "
   objNetwork.MapNetworkDrive "o:", "\\olysbs\job costing"
end if

if InStr(strGroup, Admin_Group) or instr(strGrooup, Managars_Group) then
   objNetwork.MapNetworkDrive "v:", "\\olysbs\manager"
end if

if instr(strGroup, Managars_Group) or instr(strGroup, Design_East_Group) or  =instr(strGroup,Design_West_Group) then
   objNetwork.MapNetworkDrive "x:", "\\server\sprink slick"
end if

if instr(strGrooup, Managars_Group)
  objNetwork.MapNetworkDrive "n:", "\\server\drawings"
end if

if InStr(strGroup, Admin_Group) then
 objNetwork.MapNetworkDrive "p:", "\\olysbs\slg"
 objNetwork.MapNetworkDrive "s:", "\\server\slic"
 objNetwork.MapNetworkDrive "u:", "\\olysbs\hr"
 objNetwork.MapNetworkDrive "w:", "\\olysbs\accounting"
end if
Avatar of tm9

ASKER

Please close this question.
Points have been awarded in the VBS section
ASKER CERTIFIED SOLUTION
Avatar of modulo
modulo

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial