Avatar billede morten_leth Nybegynder
01. februar 2005 - 14:01 Der er 9 kommentarer og
2 løsninger

Do until loop problem

Hej Everybody

Æ' har et script som jeg skal have proppet et do until loop ind i, hvilket jeg har lidt problemer med.


Option Explicit

Dim strUsername, strDN, objOU, arrDN, strOU, strMsgBox, FSO, _
strBrugerdata, strTSProfiles, strTSHomedir

Const DELETE_READONLY = true
Const strTitle = "Delete User Account V. 1.0"
strUsername = Inputbox("Skriv hvilken bruger der skal slettes", strTitle)
do until Len(strUsername) <> 0    <----- jeg satte det ind her men det virker ikke...
If Len(strUsername) > 0 Then
    strMsgBox = MsgBox("Er du sikker på du vil slette '"& strUsername &"', ALT data bliver slettet", 4, strTitle)
    if strMsgBox = 6 then
        'Bind user to LDAP provideren
        strDN = GetUserDN(strUsername)
        'Cut in the line so strOU shows the path to the OU the user is in
        strOU = Mid(strDN, InStr(strDN, ",") + 1, Len(strDN) - InStr(strDN, ","))
        'Split the user into arrays
        arrDN = split(strDN, ",")
        'Delete the user
                On Error resume Next
        Set objOU = GetObject("LDAP://" & strOU)
            if Err.Number <> 0 Then
                On Error Goto 0
                MsgBox("Brugeren '" & strUsername & "' blev ikke fundet!")
                Wscript.quit(1)
            end if
        On Error Goto 0
        objOU.Delete "user", arrDN(0)

    strBrugerdata = "\\mag4azkssc1fil2\brugerdata$\"
    strTSProfiles = "\\mag4azkssc1fil2\tsprofiles$\"
    strTSHomedir = "\\mag4azkssc1fil1\tshomedir$\"

        'delete's shares
        On error resume next
        Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
                if FSO.FolderExists(strBrugerdata & strUsername) then
                FSO.DeleteFolder (strBrugerdata & strUsername), DELETE_READONLY
        if err.number <> 0 then
            MsgBox ("Mappen " & strBrugerdata & strUsername & " kunne ikke slettes!" & vbCTRL & "Grund: " & err.Description)
            Err.Clear
        end if
    end if
    if FSO.FolderExists(strTSProfiles & strUsername) then
        FSO.DeleteFolder (strTSProfiles & strUsername), DELETE_READONLY
    if err.number <> 0 then
        MsgBox ("Mappen " & strTSProfiles & strUsername & " kunne ikke slettes!" & vbCTRL & "Grund: " & err.Description)
        Err.Clear
    end if
    End if
    if FSO.FolderExists(strTSHomedir & strUsername) then
        FSO.DeleteFolder (strTSHomedir & strUsername), DELETE_READONLY
        if err.number <> 0 then
            MsgBox ("Mappen " & strTSHomedir & strUsername & " kunne ikke slettes!" & vbCTRL & "Grund: " & err.Description)
            Err.Clear
        end if
    end if
MsgBox(strUsername & " er nu slettet OG alle data!")
    else
    wscript.quit(1)
    end if
End if
<----- loop



' ---

' Converts a NT username in the current NetBIOS domains to the corresponding distinguished name
Function GetUserDN(strUserNTName)
  ' Declare variables
  Dim objRootDSE, strDNSDomain, objTrans, strNetBIOSDomain, strUserDN
  ' Create objects
  Set objTrans = CreateObject("NameTranslate")
  Set objRootDSE = GetObject("LDAP://RootDSE")
  ' Retrieve DNS domain name
  strDNSDomain = objRootDSE.Get("defaultNamingContext")
  ' Convert DNS domain name to NetBIOS domain name
  objTrans.Init 3, strDNSDomain
  objTrans.Set 1, strDNSDomain
  strNetBIOSDomain = objTrans.Get(3)
  ' Remove trailing backslash
  If Right(strNetBIOSDomain, 1) = "\" Then strNetBIOSDomain = Left(strNetBIOSDomain, Len(strNetBIOSDomain) - 1)
  ' Enable internal errorhandling and clear errorlog
  On Error Resume Next
  Err.Clear
  ' Convert NT username to Distinguished Name
  objTrans.Init 1, strNetBIOSDomain
  objTrans.Set 3, strNetBIOSDomain & "\" & strUserNTName
  ' Check for error
  If Err.Number <> 0 Then
    GetUserDN = ""
  End If
  ' Clear errorlog and disable internal errorhandling
  Err.Clear
  On Error GoTo 0
  strUserDN = objTrans.Get(1)
  ' If the returned distinguished name doesn't contain a common name (CN), then the user doesn't exist
  If InStr(strUserDN, "CN") > 0 Then
    ' Return distinguished name of the user
    GetUserDN = strUserDN
  Else
    ' Return empty string
    GetUserDN = ""
  End If
End Function
Avatar billede morten_leth Nybegynder
01. februar 2005 - 14:04 #1
det jeg skal have det til er at når man har skrevet et brugernavn og den har slettet brugeren og dens data, så skal den komme op og prompte en for brugernavn igen indtil man trykker på annuler... i stedet for man skal køre scriptet 5 gange for at slette 5 brugere...
Avatar billede maximus25 Nybegynder
01. februar 2005 - 14:04 #2
Hejsa morten_leth
skal do sætningen sættes rundt om al din kode og hvad skal den helt præcis udføre?
Avatar billede morten_leth Nybegynder
01. februar 2005 - 14:05 #3
hehe... skal jeg forklare igen eller var du bare for hurtig... ;) ?
Avatar billede morten_leth Nybegynder
01. februar 2005 - 14:14 #4
men jeg kan ikke helt beslutte mig for om lykken skal rundt om det hele eller hvad den ellers skal rundt om, det skal være når den har kørt det hele til ende så skal den endnu engang prompte for brugernavn, hvilket i mit lille hoved betyder den skal rundt om det hele.
Avatar billede maximus25 Nybegynder
01. februar 2005 - 14:21 #5
jeg tror ikke helt jeg forstår hvad det er du vil.....du er da nød til at taste et brugernavn ind for at den kan slette en konto...som jeg forstår det vil du gerne have slettet flere brugere på en gang....det kan du ikke....med mindre du henter brugernavnene fra eksempeltvis en tekstfil
Avatar billede morten_leth Nybegynder
01. februar 2005 - 14:51 #6
nope... det er faktisk det jeg prøvede at sige.... det du startede med at skrive... at man skal promptes for et brugernavn, for ellers kan det ikke slettes...
Det det jeg mener... så du har fat i det rigtige... :P

Og det med en tekstfil dur ikke da der er nogen med i det her som også skal kunne gøre det men som ikke kan finde ud af sådan noget... hehe... så det skal være så enkelt som muligt...
Avatar billede maximus25 Nybegynder
01. februar 2005 - 15:58 #7
jeg ville ligge din inputbox ind i en function og så lave et kald til functionen sidst i scriptet....du skal så bare lave et check(if sætning) som springer ud af scriptet hvis der trykkes på cancel.
Avatar billede morten_leth Nybegynder
03. februar 2005 - 10:11 #8
Funktioner har jeg ikke arbejdet så meget med, ved faktisk ikke hvordan det virker, subs kan jeg da forestille mig inde i mit hoved at de skal kaldes men funktionerne forstår jeg faktisk ikke..... (hvis du gider må du godt forklare mig det...)
Den funktion jeg bruger i det script her har jeg fået af en tidligere kollega...

Kan godt smide lidt flere points ind...
Avatar billede maximus25 Nybegynder
03. februar 2005 - 11:51 #9
Hejsa morten_leth
Flere point er altid rart:):)

Her er koden du kan bruge:

function delete()
dim strUsername

strUsername=InputBox("Skriv hvilken bruger der skal slettes", "Slet Bruger","Skriv brugernavn")

if strUsername= Empty Then
msgbox "Du har trykket Cancel og der afsluttes"
else
msgbox "Her indsætter du den kode der skal udføre selve sletningen"
call delete
end if
end function

call delete
Avatar billede morten_leth Nybegynder
04. februar 2005 - 12:53 #10
okay måden du gør det der... hvad er så forskellen på at smide det hele i en sub fremfor en function???
Avatar billede morten_leth Nybegynder
07. februar 2005 - 11:33 #11
Jeg fandt ud af at gøre det på den måde du har vist der, så nu ved jeg også hvordan den laves... takker for det...

Du får de 100 point... håber det er ok... ellers skriv igen...
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