Solved

Script is being strange

Posted on 2016-11-04
8
81 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
NEW Veeam Agent for Microsoft Windows

Backup and recover physical and cloud-based servers and workstations, as well as endpoint devices that belong to remote users. Avoid downtime and data loss quickly and easily for Windows-based physical or public cloud-based workloads!

 

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

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

While rebooting windows server 2003 server , it's showing "active directory rebuilding indices please wait" at startup. It took a little while for this process to complete and once we logged on not all the services were started so another reboot is …
This article runs through the process of deploying a single EXE application selectively to a group of user.
This tutorial will walk an individual through the steps necessary to join and promote the first Windows Server 2012 domain controller into an Active Directory environment running on Windows Server 2008. Determine the location of the FSMO roles by lo…
Attackers love to prey on accounts that have privileges. Reducing privileged accounts and protecting privileged accounts therefore is paramount. Users, groups, and service accounts need to be protected to help protect the entire Active Directory …

730 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