dcsimg

Clean Up User Profiles Using ADSI

By ServerWatch Staff (Send Email)
Posted Aug 23, 2000


by John Loomes

This script can be used to clean up local copies of user profiles on a machine. It comes with a logging mode which enables you to just log the names of the users who have local profiles stored on a machine, before you take the decision to remove them.

This script can be used to clean up local copies of user profiles on a machine. It comes with a logging mode which enables you to just log the names of the users who have local profiles stored on a machine, before you take the decision to remove them.

SDIM UserObj
DIM Object
DIM GroupObj
Dim Flags
DIm strProfile
DIM strUser
DIM result
Dim strErrMsg

' This constant determines whether the script should just log the changes it intends to make without actually doing them
' This allows an administrator to review the changes before setting the flag to FALSE which causes the changes to actually happen
CONST LogOnly = True

' Path to group containing accounts to check
Set GroupObj = GetObject("WinNT://MY_PC/Users")
On error resume next
       
For each Object in GroupObj.Members
    strErrMsg = "No Errors"
    ' Find all Computer Objects
    If Object.Class = "User" then
        Set UserObj = GetObject(Object.ADsPath)
        strProfile = UserObj.get("Profile")
        strUser = Object.Name
        if instr(strProfile,strUser)> 0 then
    Set fso = CreateObject("Scripting.FileSystemObject")
            If (fso.FolderExists(strProfile)) Then
                ' Only acutally delete profiles if LogOnly is set to FALSE
            If LogOnly = False Then
                result = DeleteProfile(strUser,strProfile)
            End if
        Else
            strErrMsg = "Path Not Found"
        End if   
        ' Trap any errors
    if Err Then
                Select Case Err.Number
            Case 70     strErrMsg = "Access Denied"
            Case 75 strErrMsg = "Path/File access error"
        End Select
            end if    
            result = Logit(strUser,strProfile,strErrMsg)        
end if
end if
Next


Set fso = Nothing


' Delete the profile for the user
Function DeleteProfile(User,Profile)

    Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")

    fso.DeleteFolder Profile,True

    Set fso = Nothing

end function


' Log results
Function Logit(User,Profile,Errors)
    ' Path to Log File
    CONST strLogFile = "C:\DelProfile.txt"
    Set objFS = CreateObject("Scripting.FileSystemObject")
    Set strTextStream = objFS.OpenTextFile(strLogFile, 8, true)
   
    strTextStream.WriteLine("Account:" & vbTab & User & vbTab & "Profile Path:" & vbTab & strProfile & vbTab & "Errors:" & vbtab & Errors & vbTab & "Date:" & vbTab & Date & vbTab & "Time:" & vbTab & Time)
    strTextStream.Close

    Set objFS = Nothing
    Set strTextStream = Nothing

end Function


Please note that this is provided 'as is' with no warranties i.e. dont blame me if it all goes wrong!

Page 1 of 1


Comment and Contribute

Your name/nickname

Your email

(Maximum characters: 1200). You have characters left.