Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Chris Miller on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Help with existing logon script drive mapping

Status
Not open for further replies.

SBD40

IS-IT--Management
Jun 5, 2007
4
US
I have an existing logonscript that worked, but I would like to enhance it by making the drive mapping persistent.
If I add ",True" to the following lines I get a to many param error.
DriveMapper "h:", "\\fileserver\users\" & strUser ' Connect to users Home share

on fileserver
DriveMapper "g:", "\\fileserver\groups" ' Connect to

'Groups share on fileserver
DriveMapper "p:", "\\fileserver\public" ' Connect to

'Public share on fileserver

Any Ideas on where I'm going wrong?
Thanks
 
Where is defined the DriveMapper procedure ?

Hope This Helps, PH.
FAQ219-2884
FAQ181-2886
 
Sub DriveMapper(sDrive, sShare)
For i = 0 to objDrives.Count -1 Step 2
if LCase(sDrive) = LCase(objDrives.Item(i)) then
if not LCase(sShare) = LCase(objDrives.Item(i+1)) then
objNetwork.RemoveNetworkDrive sDrive, true, true
Else
if bolWriteLog then objLogFile.WriteLine(Now() & ": Success:

Connect """ & sDrive & """ to share """ & _
sShare & """ (previously connected)")
Exit Sub
End if
End if
Next
on error resume next
objNetwork.MapNetworkDrive sDrive, sShare
If Err.Number = 0 Then
if bolWriteLog then objLogFile.WriteLine(Now() & ": Success: Connect """ &

sDrive & """ to share """ & sShare & """")
else
if bolWriteLog then objLogFile.WriteLine(Now() & ": Failed: Connect """ &

sDrive & """ to share """ & sShare & """")
end if
on error goto 0
End Sub
 
making the drive mapping persistent
objNetwork.MapNetworkDrive sDrive, sShare[!], True[/!]

Hope This Helps, PH.
FAQ219-2884
FAQ181-2886
 
That didn't do the trick. If I log off or shut down I lose the drive mappings. Curious thing is I have printers assigned in a similar way with the same script and they remain. Am I missing something?
Here is the entire script:

'$$$$ Version 2005-07-27 $$$$
'12:32 PM 1/20/2005: ADD: WriteLog() function. See Usage below
'12:25 PM 1/20/2005: ADD: Print successfull isMember() functions to the log file.
'12:01 AM 7/24/2005: ADD: isComputerMember function Check group membership for computers
' 1:07 PM 7/24/2005: MOD: Cleaned up code a bit, properly empty objects and some other minor changes
' 1:20 PM 7/24/2005: ADD: Run Command: Execute external files
' 1:31 PM 7/24/2005: ADD: FileCopy Command: Execute external files
'10:17 PM 7/26/2005: FIX: Driveletter remap issue in the DriveMapper sub
' 4:40 PM 7/27/2005: FIX: Error handling in isComputerMember function in case group referred does not exist.
Dim strLogName, bolWriteLog, bolManagePrinters
strLogName = "script.log" ' Filename of log to write to in the temp folder.
bolWriteLog = True ' Toggles log-writing. I like it on, you may like it off.
bolManagePrinters = True ' Windows 9x doesn't do very well with printer management, set this to false to disable

'Script Begins Here
Dim objNetwork, objDrives, objDict, objComputer, objShell, objFileSystem, objLogFile
Dim strComputerName, strDomain, strUser, strAdsPath, strTemp, strLogPath
Set objNetwork = WScript.CreateObject("Wscript.Network")
Set objDrives = objNetwork.EnumNetworkDrives
strComputerName = objNetwork.ComputerName
strDomain = objNetwork.UserDomain
strUser = objNetwork.UserName
strAdsPath = strDomain & "/" & strUser

Set objComputer = GetObject("WinNT://" & strDomain & "/" & strComputerName & ",computer")
Set objShell = WScript.CreateObject("WScript.Shell")
strTemp = objshell.ExpandEnvironmentStrings("%TEMP%")
strLogPath = strTemp & "\" & strLogName '"
set objFileSystem = WScript.CreateObject("Scripting.FileSystemObject")
if bolWriteLog then 'initialize log file
on error resume next
Set objLogFile = objFileSystem.OpenTextFile(strLogPath, 2, True) '"
writelog "############### Start Login Script ##################"
if not err.number = 0 then
msgbox "There was a problem opening the log file for writing." & chr(10) & _
"Please check whether """ & strLogPath & """ is a valid file and can be openend for writing." & _
chr(10) & chr(10) & "If you're not sure what to do, please contact your support person.",vbCritical, "Logon Script Error"
wscript.quit
end if
on error goto 0
end if

'############################### ###############################
'############################### INSTRUCTIONS ###############################
'############################### ###############################
'Check for user group membership with isMember:
'isMember will write an entry in the log file when a user is in the group
'if isMember("groupname") then
' commands here
'end if

'Check for computer group membership with isComputerMember: (usefull for location specific printer creation)
'isComputerMember will write an entry in the log file when a user is in the group
'if isComputerMember("groupname") then
' commands here
'end if

'Map drives with DriveMapper:
'DriveMapper "Drive:", "\\Server\share"

'Add Printers with AddPrinter:
'AddPrinter "\\Server\Printername"

'Set a default printer with SetPrinterDefault (printer has to exist, or this will not work)
'SetPrinterDefault "\\Server\Printername"

'Remove Printers with RemovePrinter:
'RemovePrinter "\\Server\Printername"

'Execute any file with Run:
'Run "c:\windows\notepad.exe"
'Run "\\server\share\script.vbs"

'Copy files with FileCopy(source, target):
'FileCopy "\\server\share\*.txt", "c:\temp\"
'NOTE: copies are not recursive, and wildcards can only exists in the file level.
'NOTE: Users must have permission to write files in the target location

'Write an entry to the log file with WriteLog():
'writelog("some text here")

'Set user environment variables with PutEnv:
'PutEnv "Variablename", "VariableValue"

'A log file will be placed in the user's temp directory and will
'be named to the ScriptLogName variable set above.

'############################### CHANGE ###############################
'############################### SCRIPT ###############################
'############################### BELOW ###############################

' ##### Common drive mappings for all users and computers. #####
DriveMapper "h:", "\\fileserver\users\" & strUser ' Connect to users Home share on fileserver
DriveMapper "g:", "\\fileserver\groups" ' Connect to 'Groups share on fileserver
DriveMapper "p:", "\\fileserver\public" ' Connect to 'Public share on fileserver


' ##### Being computer based membership mappings #####

' Worship Center Upstairs Mappings
If IsComputerMember("WorshipCenterUpstairs") Then
AddPrinter "\\fileserver\WCIT4000PCL" ' Create printer from shared printer
AddPrinter "\\fileserver\WC-UP-AC-4000-PCL" ' Create printer from shared printer
AddPrinter "\\fileserver\WC-UP-Minolta Di250 PCL 6" ' Create printer from shared printer
AddPrinter "\\fileserver\HPCLJ8500-PCL" ' Create printer from shared printer

End If

' Worship Center Downstairs Mappings
If IsComputerMember("WorshipCenterDownstairs") Then
AddPrinter "\\fileserver\WC-DN-OKIC5200n" ' Create printer from shared printer
AddPrinter "\\fileserver\WC-DN-7155-PCL" ' Create printer from shared printer
AddPrinter "\\fileserver\WC-DN-7155-PS" ' Create printer from shared printer
AddPrinter "\\fileserver\WC-DN-4050TN-PCL" ' Create printer from shared printer
End If

' Education Center Mappings
If IsComputerMember("EducationCenter") Then
AddPrinter "\\fileserver\LD-4100TN-PCL" ' Create printer from shared printer
AddPrinter "\\fileserver\LD-7165-PCL6" ' Create printer from shared printer
AddPrinter "\\fileserver\HPCLJ8500-PCL" ' Create printer from shared printer
AddPrinter "\\fileserver\LD-OKIC5500n" ' Create printer from shared printer

End If

' Youth Center Mappings
If IsComputerMember("YouthCenter") Then
AddPrinter "\\fileserver\YC-UP-4050TN-PCL" ' Create printer from shared printer
AddPrinter "\\fileserver\YC-UP-CO-1320N-PCL6" ' Create printer from shared printer
AddPrinter "\\fileserver\YC-UP-Minolta Di350 PCL6" ' Create printer from shared printer
AddPrinter "\\yc-dthweatt\YC-Photosmart" ' Create printer from shared printer
AddPrinter "\\fileserver\HPCLJ8500-PCL" ' Create printer from shared printer
AddPrinter "\\fileserver\YC-OKIC5500N" ' Create printer from shared printer
End If

' Trailer Mappings
If IsComputerMember("Trailers") Then
AddPrinter "\\fileserver\CH-4050TN-PCL" ' Create printer from shared printer
AddPrinter "\\fileserver\CH-7155-PCL" ' Create printer from shared printer
AddPrinter "\\fileserver\CH-7155-PS" ' Create printer from shared printer
AddPrinter "\\fileserver\WC-DN-OKIC5200n" ' Create printer from shared printer

End If

' Document Center Mappings
If IsComputerMember("Trailers") Then
AddPrinter "\\fileserver\DC-1220c" ' Create printer from shared printer
AddPrinter "\\fileserver\DC-5000-PCL 6" ' Create printer from shared printer
AddPrinter "\\fileserver\HPCLJ8500-PCL" ' Create printer from shared printer
AddPrinter "\\fileserver\CH-4050TN-PCL" ' Create printer from shared printer
End If

' ##### Being user based membership mappings #####

' Information Systems Mappings
if isMember("Information Systems") then
DriveMapper "i:", "\\fileserver\Groups\Information Technology" ' Connect to deparment group folder
SetPrinterDefault "\\fileserver\WCIT4000PCL" ' Set the printer as default
end if

'######################### ^^CHANGE SCRIPT ABOVE^^ ##########################

'######################### Subs 'n Functions Below #########################
'############################## DO NOT CHANGE ##############################

writelog "################ End Login Script ###################"
Set objNetwork = Nothing
Set objDrives = Nothing
Set objComputer = Nothing
Set objShell = Nothing
Set objFileSystem = Nothing
Set objLogFile = Nothing
Wscript.Quit

Function IsMember(sGroup)
Dim oDict, oUser, oGroup

If IsEmpty(oDict) Then
Set oDict = CreateObject("Scripting.Dictionary")
oDict.CompareMode = vbTextCompare
Set oUser = GetObject("WinNT://" & strAdsPath & ",user")
For Each oGroup In oUser.Groups
oDict.Add oGroup.Name, "-"
Next
Set oUser = Nothing
End If
IsMember = CBool(oDict.Exists(sGroup))
if IsMember and bolWriteLog then objLogFile.WriteLine(Now() & ": Success: User is member of " & sGroup)
End Function


Function IsComputerMember(sGroup)
Dim oGroup
on error resume next
Set oGroup = GetObject("WinNT://" & strDomain & "/" & sGroup & ",group")
IsComputerMember = CBool(oGroup.IsMember(objComputer.ADsPath & "$"))
if IsComputerMember and bolWriteLog then objLogFile.WriteLine(Now() & ": Success: Computer is member of " & sGroup)
Set oGroup = Nothing
If not Err.Number = 0 Then
if bolWriteLog then objLogFile.WriteLine(Now() & ": Failed : IsComputerMember could not locate group " & sGroup)
end if
on error goto 0
End Function


sub WriteLog(sEntry)
if bolWriteLog then objLogFile.WriteLine(Now() & ": Log: " & sEntry)
End Sub


Sub DriveMapper(sDrive, sShare)
For i = 0 to objDrives.Count -1 Step 2
if LCase(sDrive) = LCase(objDrives.Item(i)) then
if not LCase(sShare) = LCase(objDrives.Item(i+1)) then
objNetwork.RemoveNetworkDrive sDrive, true, true
Else
if bolWriteLog then objLogFile.WriteLine(Now() & ": Success: Connect """ & sDrive & """ to share """ & _
sShare & """ (previously connected)")
Exit Sub
End if
End if
Next
on error resume next
objNetwork.MapNetworkDrive sDrive, sShare, True
If Err.Number = 0 Then
if bolWriteLog then objLogFile.WriteLine(Now() & ": Success: Connect """ & sDrive & """ to share """ & sShare & """")
else
if bolWriteLog then objLogFile.WriteLine(Now() & ": Failed: Connect """ & sDrive & """ to share """ & sShare & """")
end if
on error goto 0
End Sub


sub AddPrinter(sPrinterUNC)
on error resume next
if not bolManagePrinters then
if bolWriteLog then objLogFile.WriteLine(Now() & ": Success: Printer connection skipped because disabled (" & _
strUser & " on " & strComputerName & ")")
else
objNetwork.AddWindowsPrinterConnection sPrinterUNC
If Err.Number = 0 Then
if bolWriteLog then objLogFile.WriteLine(Now() & ": Success: Connect to printer: " & sPrinterUNC)
else
if bolWriteLog then objLogFile.WriteLine(Now() & ": Failed: Connect to printer: " & sPrinterUNC)
end if
end if
on error goto 0
end sub


sub RemovePrinter(sPrinterUNC)
Set objPrinters = objNetwork.EnumPrinterConnections
For i = 0 to objPrinters.Count - 1 Step 2
if uCase(objPrinters.Item(i+1)) = uCase(sPrinterUNC) then
on error resume next
objNetwork.RemovePrinterConnection sPrinterUNC, true, true
If Err.Number = 0 Then
if bolWriteLog then objLogFile.WriteLine(Now() & ": Success: Remove printer: " & sPrinterUNC)
else
if bolWriteLog then objLogFile.WriteLine(Now() & ": Failed: Remove printer: " & sPrinterUNC)
end if
on error goto 0
exit sub
end if
Next
if bolWriteLog then objLogFile.WriteLine(Now() & ": Success: Remove printer: " & printerUNC & " (Printer did not exist)" )
set objPrinters = Nothing
end sub


sub SetPrinterDefault(sPrinterUNC)
on error resume next
if not bolManagePrinters then
if bolWriteLog then objLogFile.WriteLine(Now() & ": Success: Default printer to " & sPrinterUNC & _
" skipped because disabled (" & strUser & " on " & strComputerName & ")")
else
objNetwork.SetDefaultPrinter sPrinterUNC
If Err.Number = 0 Then
if bolWriteLog then objLogFile.WriteLine(Now() & ": Success: Set as Default: " & sPrinterUNC)
else
if bolWriteLog then objLogFile.WriteLine(Now() & ": Failed: Set as Default: " & sPrinterUNC)
end if
end if
on error goto 0
end sub


Sub PutEnv(sName, sValue)
Dim oEnv
Set oEnv = objShell.Environment("USER")
env(sName) = sValue
if bolWriteLog then objLogFile.WriteLine(Now() & ": Success: Set user variable """ & sName & """ to: """ & sValue & """")
Set oEnv = Nothing
End Sub


Sub Run(ByVal sFile)
on error resume next
objShell.Run Chr(34) & sFile & Chr(34), 1, false
If Err.Number = 0 Then
if bolWriteLog then objLogFile.WriteLine(Now() & ": Success: Execute: " & sFile)
else
if bolWriteLog then objLogFile.WriteLine(Now() & ": Failed: Execute: " & sFile)
end if
on error goto 0
End Sub


Sub FileCopy(sSource, sTarget)
on error resume next
objFileSystem.CopyFile sSource, sTarget
If Err.Number = 0 Then
if bolWriteLog then objLogFile.WriteLine(Now() & ": Success: Copy: " & sSource & " to " & sTarget)
else
if bolWriteLog then objLogFile.WriteLine(Now() & ": Failed: Copy: " & sSource & " to " & sTarget)
end if
on error goto 0
End Sub
 
If it is part of a login script that will process every time a user logs in, then why do you even need to make it persistent?

Have a look at my login script FAQ which may help you too.

faq329-5798

I hope you find this post helpful.

Regards,

Mark

Check out my scripting solutions at
Work SMARTER not HARDER. The Spider's Parlor's Admin Script Pack is a collection of Administrative scripts designed to make IT Administration easier! Save time, get more work done, get the Admin Script Pack.
 
Thanks Mark,
It is part of a GP. And I am looking at your FAQ and will probably be using it to rewrite the script today.
You have some cool addons.
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top