Solved

Script is being strange

Posted on 2016-11-04
8
50 Views
Last Modified: 2016-11-17
I have this script:
Set objNetwork = CreateObject("WScript.Network")
 Set objUser = CreateObject("ADSystemInfo")
 Set objCurrentUser = GetObject("LDAP://" & objUser.UserName)
Set objFSO = CreateObject("Scripting.FileSystemObject")
 If IsArray(objCurrentUser.MemberOf) Then
  strGroup = LCase(Join(objCurrentUser.MemberOf))
Else
  strGroup = LCase(objCurrentUser.MemberOf)
End If

If InStr(strGroup, lcase("CN=Users")) Then
If objFSO.DriveExists("O:") = False Then objNetwork.MapNetworkDrive "O:", "\\wscalfs\Company"
End If

 If InStr(strGroup, lcase("CN=Development")) Then
 If objFSO.DriveExists("W:") = False Then objNetwork.MapNetworkDrive "W:", "\\wscalfs\Development"
End If

 If InStr(strGroup, lcase("CN=Admissions")) Then
If objFSO.DriveExists("R:") = False Then objNetwork.MapNetworkDrive "R:", "\\wscalfs\Admissions"
End If

 If InStr(strGroup, lcase("CN=Recruitment")) Then
If objFSO.DriveExists("W:") = False Then objNetwork.MapNetworkDrive "W:", "\\wscalfs\Recruitment"
End If  

 If InStr(strGroup, lcase("CN=Financial Aid")) Then
If objFSO.DriveExists("M:") = False Then objNetwork.MapNetworkDrive "M:", "\\wscalfs\FinancialAid"
End If

 If InStr(strGroup, lcase("CN=Quickbooks")) Then
If objFSO.DriveExists("Q:") = False Then objNetwork.MapNetworkDrive "Q:", "\\wscalfs\Quickbooks"
End If  

 If InStr(strGroup, lcase("CN=Business Office")) Then
If objFSO.DriveExists("R:") = False Then objNetwork.MapNetworkDrive "R:", "\\wscalfs\BusinessOffice"
End If  

 If InStr(strGroup, lcase("CN=Administration")) Then
 If objFSO.DriveExists("M:") = False Then objNetwork.MapNetworkDrive "M:", "\\wscalfs\Administration"
End If

 If InStr(strGroup, lcase("CN=Registrar")) Then
If objFSO.DriveExists("T:") = False Then objNetwork.MapNetworkDrive "T:", "\\wscalfs\Registrar"
End If  

 If InStr(strGroup, lcase("CN=Users")) Then
If objFSO.DriveExists("S:") = False Then objNetwork.MapNetworkDrive "S:", "\\wscalfs\scans"
End If

I have a user who has the correct permissions but it is throwing an error on line 28 character 42 of "The network path was not found".  I am not sure what line that is, if it deals with Business Office or Recruitment, but there is no difference in the code at that point than there is prior to that.  I ran the script on myself with the same permissions and it completes successfully.
0
Comment
Question by:aclaus225
  • 3
  • 3
  • 2
8 Comments
 
LVL 12

Expert Comment

by:Jeff Darling
ID: 41874549
This kind of odd behavior is often due to not declaring variables.

Turn on OPTION EXPLICIT and declare all variables.
0
 
LVL 12

Accepted Solution

by:
Jeff Darling earned 250 total points
ID: 41874553
Option Explicit

Dim objNetwork
Dim objUser
Dim objCurrentUser
Dim objFSO
Dim strGroup

Set objNetwork = CreateObject("WScript.Network")
 Set objUser = CreateObject("ADSystemInfo")
 Set objCurrentUser = GetObject("LDAP://" & objUser.UserName)
Set objFSO = CreateObject("Scripting.FileSystemObject")
 If IsArray(objCurrentUser.MemberOf) Then
  strGroup = LCase(Join(objCurrentUser.MemberOf))
Else
  strGroup = LCase(objCurrentUser.MemberOf)
End If

If InStr(strGroup, lcase("CN=Users")) Then
If objFSO.DriveExists("O:") = False Then objNetwork.MapNetworkDrive "O:", "\\wscalfs\Company"
End If

 If InStr(strGroup, lcase("CN=Development")) Then 
 If objFSO.DriveExists("W:") = False Then objNetwork.MapNetworkDrive "W:", "\\wscalfs\Development"
End If 

 If InStr(strGroup, lcase("CN=Admissions")) Then
If objFSO.DriveExists("R:") = False Then objNetwork.MapNetworkDrive "R:", "\\wscalfs\Admissions"
End If 

 If InStr(strGroup, lcase("CN=Recruitment")) Then 
If objFSO.DriveExists("W:") = False Then objNetwork.MapNetworkDrive "W:", "\\wscalfs\Recruitment"
End If  

 If InStr(strGroup, lcase("CN=Financial Aid")) Then
If objFSO.DriveExists("M:") = False Then objNetwork.MapNetworkDrive "M:", "\\wscalfs\FinancialAid"
End If 

 If InStr(strGroup, lcase("CN=Quickbooks")) Then
If objFSO.DriveExists("Q:") = False Then objNetwork.MapNetworkDrive "Q:", "\\wscalfs\Quickbooks"
End If  

 If InStr(strGroup, lcase("CN=Business Office")) Then 
If objFSO.DriveExists("R:") = False Then objNetwork.MapNetworkDrive "R:", "\\wscalfs\BusinessOffice"
End If  

 If InStr(strGroup, lcase("CN=Administration")) Then
 If objFSO.DriveExists("M:") = False Then objNetwork.MapNetworkDrive "M:", "\\wscalfs\Administration"
End If

 If InStr(strGroup, lcase("CN=Registrar")) Then 
If objFSO.DriveExists("T:") = False Then objNetwork.MapNetworkDrive "T:", "\\wscalfs\Registrar"
End If  

 If InStr(strGroup, lcase("CN=Users")) Then
If objFSO.DriveExists("S:") = False Then objNetwork.MapNetworkDrive "S:", "\\wscalfs\scans"
End If 

Open in new window

0
 
LVL 67

Assisted Solution

by:sirbounty
sirbounty earned 250 total points
ID: 41874555
Add some error handling and see what you get...
Set objNetwork = CreateObject("WScript.Network")
Set objUser = CreateObject("ADSystemInfo")
Set objCurrentUser = GetObject("LDAP://" & objUser.UserName)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set dic = createobject("scripting.dictionary")

If IsArray(objCurrentUser.MemberOf) Then
  strGroup = LCase(Join(objCurrentUser.MemberOf))
Else
  strGroup = LCase(objCurrentUser.MemberOf)
End If

If InStr(strGroup, lcase("CN=Users")) Then dic.add "O:","\\wscalfs\Company"
If InStr(strGroup, lcase("CN=Development")) Then dic.add "W:", "\\wscalfs\Development"
If InStr(strGroup, lcase("CN=Admissions")) Then dic.add "R:", "\\wscalfs\Admissions"
If InStr(strGroup, lcase("CN=Recruitment")) Then dic.add "W:", "\\wscalfs\Recruitment"
If InStr(strGroup, lcase("CN=Financial Aid")) Then dic.add "M:", "\\wscalfs\FinancialAid"
If InStr(strGroup, lcase("CN=Quickbooks")) Then dic.add "Q:", "\\wscalfs\Quickbooks"
If InStr(strGroup, lcase("CN=Business Office")) Then dic.add "R:", "\\wscalfs\BusinessOffice"
If InStr(strGroup, lcase("CN=Administration")) Then dic.add "M:", "\\wscalfs\Administration"
If InStr(strGroup, lcase("CN=Registrar")) Then dic.add "T:", "\\wscalfs\Registrar"
If InStr(strGroup, lcase("CN=Users")) Then dic.add "S:", "\\wscalfs\scans"



for each DriveLetter in dic.keys
  on error resume next
  TargetPath = dic(DriveLetter)
  wscript.echo "Mapping " & DriveLetter & " to " & TargetPath
  If objFSO.DriveExists(DriveLetter) = False Then objNetwork.MapNetworkDrive DriveLetter, TargetPath
  if err.number <> 0 then 
    wscript.echo err.description
  else 
    wscript.echo "Mapped successfully"
  end if
  err.clear
next

Open in new window

0
 

Author Comment

by:aclaus225
ID: 41877980
I tried the script recommended by Jeff and it errors at the same place again.
0
 
LVL 67

Expert Comment

by:sirbounty
ID: 41878040
And mine?
0
 
LVL 12

Expert Comment

by:Jeff Darling
ID: 41879012
try the NET USE command from a DOS box to display current mapped network drives.

Do it on a good machine and on a bad machine and compare the differences.

You may need to manually NET USE /DELETE one or more of the drives in order for the script to work, or it could be some weird Active Directory permissions inheritance that is unique to your location.
0
 

Author Comment

by:aclaus225
ID: 41879085
At logout every day there is also a script that runs:
net use G: /delete
net use H: /delete
net use I: /delete
net use J: /delete
net use K: /delete
net use L: /delete
net use M: /delete
net use N: /delete
net use O: /delete
net use P: /delete
net use Q: /delete
net use R: /delete
net use S: /delete
net use T: /delete
net use U: /delete
net use V: /delete
net use W: /delete
net use X: /delete
net use Y: /delete
net use Z: /delete

Open in new window


Therefore, the computers are starting fresh at start up every day.  

As for your script Sirbounty,
that script works on my machine just fine.  On the registrar's computer I get an error, which I have attached.
anothererror.png
0
 

Author Closing Comment

by:aclaus225
ID: 41891946
I ended up just doing custom scripts for each department using a Batch file which seems to be working for everyone.
0

Join & Write a Comment

This script will sweep a range of IP addresses (class c only, 255.255.255.0) and report to a log the version of office installed. What it does: 1.)      Creates log file in the directory the script is run from (if it doesn't already exist) 2.)      Sweep…
Find out how to use Active Directory data for email signature management in Microsoft Exchange and Office 365.
This tutorial will walk an individual through the process of transferring the five major, necessary Active Directory Roles, commonly referred to as the FSMO roles from a Windows Server 2008 domain controller to a Windows Server 2012 domain controlle…
This tutorial will walk an individual through the process of transferring the five major, necessary Active Directory Roles, commonly referred to as the FSMO roles to another domain controller. Log onto the new domain controller with a user account t…

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now