Avatar billede morten_leth Nybegynder
06. januar 2005 - 13:36 Der er 6 kommentarer og
1 løsning

Problem med script og sletning af mapper. /halvvejs

Jeg har lavet et lille script til sletning af brugere i AD, det virker sådan set også okay... hvis det der skal slettes KUN er mapper, men så snart det er noget som fylder eks. deres personlige drev som hurtigt kan løbe op i 80 mb, hvilket scriptet ikke fatter, så den går bare videre ligemeget hvad... HIVLKET jo IKKE er meningen, er det noget som man kan sætte på måske et eller andet WHEN FSO.FolderIsDeleted Then eller noget alá det

Scriptet ser således ud, forslag til ændringer modtages gerne.


Option Explicit

Dim strUsername, strDN, objOU, arrDN, strOU, strMsgBox, FSO

Const strTitle = "Delete User Account V. 1.0"
strUsername = Inputbox("Skriv hvilken bruger der skal slettes", strTitle)
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)

        'delete's shares
        On error resume next
        Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
                if FSO.FolderExists("\\mag4azkssc1fil2\brugerdata$\" & strUsername) then
                FSO.DeleteFolder ("\\mag4azkssc1fil2\brugerdata$\" & strUsername)
        if err.number <> 0 then
            MsgBox ("Mappen \\mag4azkssc1fil2\brugerdata$\" & strUsername & " kunne ikke slettes!" & vbCTRL & "Grund: " & err.Description)
            Err.Clear
        end if
    end if
    if FSO.FolderExists("\\mag4azkssc1fil2\tsprofiles$\" & strUsername) then
        FSO.DeleteFolder ("\\mag4azkssc1fil2\tsprofiles$\" & strUsername)
    if err.number <> 0 then
        MsgBox ("Mappen \\mag4azkssc1fil2\tsprofiles$\" & strUsername & " kunne ikke slettes!" & vbCTRL & "Grund: " & err.Description)
        Err.Clear
    end if
    End if
    if FSO.FolderExists("\\mag4azkssc1fil1\tshomedir$\" & strUsername) then
        FSO.DeleteFolder ("\\mag4azkssc1fil1\tshomedir$\" & strUsername)
        if err.number <> 0 then
            MsgBox ("Mappen \\mag4azkssc1fil1\tshomedir$\" & 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



' ---

' 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
06. januar 2005 - 13:37 #1
hvis i ikke forstår hvad jeg skriver så sig lige til så prøver jeg igen...
Avatar billede killerclown Nybegynder
06. januar 2005 - 13:40 #2
Du tror ikke den fejler ved et af de biblioteker ?
Prøv, at fjerne on error resume next, og prøv igen

/Killer
Avatar billede morten_leth Nybegynder
06. januar 2005 - 14:23 #3
Der kommer ingen fejlmeddelelser overhovedet, den sletter dem bare ikke hvis det er.... den gør det bare ikke.... mærkeligt... men kender du et eller andet smart eller???
Avatar billede killerclown Nybegynder
06. januar 2005 - 14:41 #4
Nøøøh .. ikke umiddelbart.
Men vi kan da kigge på det :o)
Avatar billede morten_leth Nybegynder
08. januar 2005 - 16:35 #5
Jow det kunne da være lækkert... jeg vil sige, der kan godt laves noget midlertidigt, men ikke holdbart i længden hvis du spørger mig...
wscript.sleep xxxx
eksembelvis, det jo en mulighed, men ikke en særlig holdbar en.... lidt surt...
Avatar billede morten_leth Nybegynder
13. januar 2005 - 17:24 #6
Jeg har selv fundet ud af hvad fanden der var i vejen...
Det fordi det jeg sletter blandt andet, det jeg sletter er citrix profiler, og ja, der er selvfølgelig readonly filer i blandt....
Jeg VED så ikke lige hvorfor fanden lortet ikke kom med fejl...
det burde det jo....
Og jeg ved heller ikke om wscript.sleep xxxx hvorfor det hjalp.. det burde det heller ikke... men det har det jo nok heller ikke hvis man tænker sig lidt om... ;)

Men det virker nu.... Scriptet har jeg her

Lægger lige svar, og acceptere selv, hvis du også kommer med svar får du også lidt point fordi du gad at kigge lidt på det... ;)

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)
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



' ---

' 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
15. januar 2005 - 16:49 #7
kay... tager jeg som om du ikke har lyst til nogen point.. tager dem selv... god vind....
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