Avatar billede superjma Nybegynder
15. september 2004 - 16:23 Der er 2 kommentarer og
1 løsning

VBS-script til mapning af netværksdrev på server

Jeg har et problem med et loginscript som ellers virker fint.

Når brugeren taster forkert brugernavn eller password kommer der en fejl istedet for at gentage login-proceduren. Jeg har en loginbox som ser således ud.

Function PasswordBox(sPrompt, sDefault)
  set oSH = CreateObject("Wscript.Shell")
  set oIE = CreateObject("InternetExplorer.Application")
  With oIE
    .RegisterAsDropTarget = False
    .Resizable = False : .FullScreen = True
    .width = 400      : .height = 200
    .Navigate "about:blank"
    Do Until .ReadyState = 4 : WScript.Sleep 100 : Loop
    .document.open
    .document.write _
            "<html><head><" & "script>bboxwait=true;</" _
          & "script><title>Netværkslogin</title></head>"_
          & "<body style='background-color: #F0F0E2;' scroll=no language=vbs" _
          & " style='border-Style:outset;border-Width:3px'" _
          & " style='border-Style:outset;border-Width:3px'" _
          &  " onContextmenu='window.event.cancelbubble=true" _
          & ":window.event.returnvalue=false'" _
          & " onhelp='window.event.keycode=0" _
          & ":window.event.cancelbubble=true" _
          & ":window.event.returnvalue=false'" _
          & " onkeydown='if ((window.event.keycode>111) and "_
          & " (window.event.keycode<117)) or" _
          & " window.event.ctrlkey then" _
          & " window.event.keycode=0" _
          & ":window.event.cancelbubble=true" _
          & ":window.event.returnvalue=false'" _
          & " onkeypress='if window.event.keycode=13 then" _
          & " bboxwait=false'><center>" _
      & "<table><tr><td> <b>Brugernavn:</b></td><td>" _
          & "<input type=text id=user value=''>" _
          & "</td><tr><td> <b>Adgangskode:</b></td><td>" _
          & "<input type=password id=pass size=22></td></tr></table><br>" _
          & "<button onclick='bboxwait=false;'> Login </button>" _
          & "</center></body></html>"
    .document.close
    Do Until .ReadyState = 4 : WScript.Sleep 100 : Loop
    With .document
      oIE.left = .parentWindow.screen.width \ 2 - 200
      oIE.top  = .parentWindow.screen.height\ 2 - 100
      .all.user.focus
      .all.user.select ' Optional
      PasswordBox = Array("CANCELLED")
      On Error Resume Next
      Do While .parentWindow.bBoxWait
        oSH.Appactivate "Netværkslogin"
        oIE.Visible = True
        if Err Then Exit Function
        WScript.Sleep 100
      Loop
      oIE.Visible = False
      PasswordBox = Split(.all.user.value _
                  & "|" & .all.pass.value, "|")
    End With ' document
  End With  ' IE
End Function

Den kaldes således
input = join(passwordbox("", ""), ", ")
separator = InStr(input, ",")
brugernavn = Mid(input, 1, separator-1)
adgangskode = Mid(input, separator+2, Len(input))

Dim WSHNetwork
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WSHNetwork = WScript.CreateObject("WScript.Network")
Set CheckDrive = WshNetwork.EnumNetworkDrives()
AlreadyConnected = False

Set oShell = CreateObject("WScript.shell")

'DREV
WSHNetwork.MapNetworkDrive "I:", "\\server\sti", "false", brugernavn, adgangskode


Jeg har forsøgt forskellige løsninger på at smide en while eller lign. omkring loginproceduren således at den kaldes hele tiden indtil man taster sit brugernavn og password rigtigt.

Hvordan løser man dette problem, således at den hverken afslutter eller viser fejl såfremt man taster forkert.
Avatar billede tofte Juniormester
19. september 2004 - 16:27 #1
Har lavet en kontrol om netværksdrevet er mappet, hvis ikke prøver den igen, og dette gentages 3 gange. Håber det var det du mente. Jeg har tilmed sat on error resume next så brugeren ikke ser fejlen. Håber det var det du mente


dim cont,count
cont = true
count=1
while cont
    input = join(passwordbox("", ""), ", ")
    separator = InStr(input, ",")
    brugernavn = Mid(input, 1, separator-1)
    adgangskode = Mid(input, separator+2, Len(input))

    Dim WSHNetwork
    Set WshShell = WScript.CreateObject("WScript.Shell")
    Set WSHNetwork = WScript.CreateObject("WScript.Network")
    Set CheckDrive = WshNetwork.EnumNetworkDrives()
    AlreadyConnected = False

    Set oShell = CreateObject("WScript.shell")
    on error resume next
    'DREV
    WSHNetwork.MapNetworkDrive "I:", "\\server\sti", "false", brugernavn, adgangskode
    dim clsDrives
    Set clDrives = WshNetwork.EnumNetworkDrives
    For i = 0 to clDrives.Count -1
        if clDrives.Item(i)="I:" then cont = false
    Next
    if count=3 then cont=false
    count=count+1
wend
Avatar billede superjma Nybegynder
27. september 2004 - 11:34 #2
Tusind tak.

Det virker!
Avatar billede tofte Juniormester
27. september 2004 - 11:35 #3
Det var så lidt
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