Avatar billede leif Seniormester
16. maj 2005 - 20:30 Der er 7 kommentarer og
1 løsning

Stopper ved Error, men skal forsætte

Hej,

Jeg har et script som køres når brugeren logger ind, men den stopper hvis den ikke af en eller anden årsag ikke kan finde det share eller printer den skal tilføje.

Scriptet ser ud som følger:
' Tilføjer Netværksshare afhængig af Usergruppe
' Tilføjer Printer afhængig af Computergruppe

Option Explicit

Dim objNetwork, objSysShare1, strUserDN
Dim objGroupList, objUser, objFSO
Dim strComputerDN, objComputer

Set objNetwork = CreateObject("Wscript.Network")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objSysShare1 = CreateObject("ADSystemShare1")
strUserDN = objSysShare1.userName
strComputerDN = objSysShare1.computerName

' Bind to the user and computer objects with the LDAP provider.
Set objUser = GetObject("LDAP://" & strUserDN)
Set objComputer = GetObject("LDAP://" & strComputerDN)


''''''''''''''''''''''''''''''''''
''Networkshare ADD
''''''''''''''''''''''''''''''''''
' Map a network drive if the user is a member of the group.
' Alert the user if the drive cannot be mapped.
If IsMember(objUser, "Afd1") Then
  On Error Resume Next
  objNetwork.MapNetworkDrive "S:", "\\Server1\Share1"
  If Err.Number <> 0 Then
    On Error GoTo 0
    objNetwork.RemoveNetworkDrive "S:", True, True
    objNetwork.MapNetworkDrive "S:", "\\Server1\Share1"
  End If
  On Error GoTo 0
End If

If IsMember(objUser, "Afd2") Then
  On Error Resume Next
  objNetwork.MapNetworkDrive "P:", "\\Server1\Share2"
  If Err.Number <> 0 Then
    On Error GoTo 0
    objNetwork.RemoveNetworkDrive "P:", True, True
    objNetwork.MapNetworkDrive "P:", "\\Server1\Share2"
  End If
  objNetwork.MapNetworkDrive "R:", "\\Server1\Share3"
  If Err.Number <> 0 Then
    On Error GoTo 0
    objNetwork.RemoveNetworkDrive "R:", True, True
    objNetwork.MapNetworkDrive "R:", "\\Server1\Share3"
  End If
  objNetwork.MapNetworkDrive "V:", "\\Server2\Share1"
  If Err.Number <> 0 Then
    On Error GoTo 0
    objNetwork.RemoveNetworkDrive "V:", True, True
    objNetwork.MapNetworkDrive "V:", "\\Server2\Share1"
  End If
  On Error GoTo 0
End If

'Arkv (ALLE)
  On Error Resume Next
  objNetwork.MapNetworkDrive "T:", "\\Server3\Arkiv"
  If Err.Number <> 0 Then
    On Error GoTo 0
    objNetwork.RemoveNetworkDrive "T:", True, True
    objNetwork.MapNetworkDrive "T:", "\\Server3\Arkiv"
  End If
''''''''''''''''''''''''''''''''''
''Networkshare ADD - END
''''''''''''''''''''''''''''''''''

''''''''''''''''''''''''''''''''''
''Printer ADD
''''''''''''''''''''''''''''''''''
' Add a network printer if the computer is a member of the group.
' Make this printer the default.
objNetwork.RemovePrinterConnection "\\print\print101"
objNetwork.RemovePrinterConnection "\\print\print102"



If IsMember(objComputer, "COM_Afd1") Then
  objNetwork.AddWindowsPrinterConnection "\\print\print201"
  objNetwork.SetDefaultPrinter "\\print\print201"
End If

If IsMember(objComputer, "COM_Afd2") Then
  objNetwork.AddWindowsPrinterConnection "\\print\print302"
  objNetwork.SetDefaultPrinter "\\print\print302"
End If
''''''''''''''''''''''''''''''''''
''END - Printer ADD
''''''''''''''''''''''''''''''''''

''''''''''''''''''''''''''''''''''
''Clean up.
''''''''''''''''''''''''''''''''''
Set objNetwork = Nothing
Set objFSO = Nothing
Set objSysShare1 = Nothing
Set objGroupList = Nothing
Set objUser = Nothing
Set objComputer = Nothing

Function IsMember(objADObject, strGroup)
' Function to test for group membership.
' objGroupList is a dictionary object with global scope.

  If IsEmpty(objGroupList) Then
    Set objGroupList = CreateObject("Scripting.Dictionary")
  End If
  If Not objGroupList.Exists(objADObject.sAMAccountName & "\") Then
    Call LoadGroups(objADObject, objADObject)
    objGroupList(objADObject.sAMAccountName & "\") = True
  End If
  IsMember = objGroupList.Exists(objADObject.sAMAccountName & "\" _
    & strGroup)
End Function

Sub LoadGroups(objPriObject, objADSubObject)
' Recursive subroutine to populate dictionary object objGroupList.

  Dim colstrGroups, objGroup, j

  objGroupList.CompareMode = vbTextCompare
  colstrGroups = objADSubObject.memberOf
  If IsEmpty(colstrGroups) Then
    Exit Sub
  End If
  If TypeName(colstrGroups) = "String" Then
    Set objGroup = GetObject("LDAP://" & colstrGroups)
    If Not objGroupList.Exists(objPriObject.sAMAccountName & "\" _
        & objGroup.sAMAccountName) Then
      objGroupList(objPriObject.sAMAccountName & "\" _
        & objGroup.sAMAccountName) = True
      Call LoadGroups(objPriObject, objGroup)
    End If
    Set objGroup = Nothing
    Exit Sub
  End If
  For j = 0 To UBound(colstrGroups)
    Set objGroup = GetObject("LDAP://" & colstrGroups(j))
    If Not objGroupList.Exists(objPriObject.sAMAccountName & "\" _
        & objGroup.sAMAccountName) Then
      objGroupList(objPriObject.sAMAccountName & "\" _
        & objGroup.sAMAccountName) = True
      Call LoadGroups(objPriObject, objGroup)
    End If
  Next
  Set objGroup = Nothing
End Sub


''''''''''''''''''''''''''''''''''
''Funktionen som gør at Networkshare fungerer
''''''''''''''''''''''''''''''''''
Function MapDrive(strDrive, strShare)
' Function to map network share to a drive letter.
' If the drive letter specified is already in use, the function
' attempts to remove the network connection.
' objFSO is the File System Object, with global scope.
' objNetwork is the Network object, with global scope.
' Returns True if drive mapped, False otherwise.

  Dim objDrive

  On Error Resume Next
  If objFSO.DriveExists(strDrive) Then
    Set objDrive = objFSO.GetDrive(strDrive)
    If Err.Number <> 0 Then
      On Error GoTo 0
      MapDrive = False
      Exit Function
    End If
    If CBool(objDrive.DriveType = 3) Then
      objNetwork.RemoveNetworkDrive strDrive, True, True
    Else
      MapDrive = False
      Exit Function
    End If
    Set objDrive = Nothing
  End If
  objNetwork.MapNetworkDrive strDrive, strShare
  If Err.Number = 0 Then
    MapDrive = True
  Else
    Err.Clear
    MapDrive = False
  End If
  On Error GoTo 0
End Function



Den skulle ikke gøre det, men er der nogen som kan se hvorfor den gør det alligevel ?

Fra
Leif
Avatar billede hiks Nybegynder
18. maj 2005 - 09:47 #1
jeg har ik haft din kodning nede og testet af gode grunde. Har du forsøgt at debugge dig igennem helt fra starten for at se hvad der sker og hvor i programmet der opstår en fejl. Der kunne jo være et sted hvor du ikke havde dækket dig ind med "Resume Next" eller lign.

/hiks
Avatar billede leif Seniormester
21. maj 2005 - 18:07 #2
Jeg har testet og kigget og vi er flere som har kigget det igennem og der er Resume Next alle steder ! Kan man egentlig ikke definere den i starten så man ikke behøver at skrive den flere gange ?
Avatar billede akesson Nybegynder
24. maj 2005 - 16:00 #3
'Når du skrive On Error GoTo 0, skal du jo også skrive 0....

'F.eks. hvis du skriver:

On Error goto 10
command2.caption = "HEJ"  '(Det er der fejlen bliver lavet)

10 '(her er hvad den skal gøre hvis der sker en fejl... Hvis der ikke står noget, går den bare videre)   

Jeg vil vælge og bruge 10 istedet for 0...  da jeg selv ikke kan få 0 til at virke...
Avatar billede leif Seniormester
24. maj 2005 - 18:21 #4
If IsMember(objUser, "Afd1") Then
  On Error Resume Next
  objNetwork.MapNetworkDrive "S:", "\\Server1\Share1"
  If Err.Number <> 0 Then
    On Error GoTo 10
    objNetwork.RemoveNetworkDrive "S:", True, True
    objNetwork.MapNetworkDrive "S:", "\\Server1\Share1"
  End If
  On Error GoTo 11
End If


:10
Resume Next

:11
command2.caption = "Fejlen er sket ved nr. 11"



Er det sådan du mener ? Er ikke så garvet i VBS endnu !
Avatar billede akesson Nybegynder
26. maj 2005 - 22:29 #5
Det er muligvis lidt af det samme
Avatar billede leif Seniormester
26. maj 2005 - 22:44 #6
Og det du mener er, at det er sådan det skal laves eller ?
Avatar billede leif Seniormester
02. juni 2005 - 22:02 #7
akesson -> Skal være ærlig at sige jeg ikke har fået det testet, men hvis du ligger et svar skal du få point !
Avatar billede leif Seniormester
19. juni 2005 - 22:24 #8
Lukker !
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester