Windows Server

How To Completely Delete a Windows Server 2008 Profile with a Script

Here's a useful script that will automatically delete ALL user profiles that are on a Windows Server 2008/R2 computer.

WARNING!
This is a dangerous operation, designed for use by an administrator who needs to do a complete purge; for instance at the end of a semester.

Note: 
For purposes of this example, we will use the following path for the script files:
D:\Scripts

  • Copy the below provided code into the notepad and save it as delete_profiles.vbs in D:\Scripts 
  • Create a new notepad file and copy the following line:

cscript.exe "D:\Scripts\delete_profiles.vbs SRVNAME" > "D:\Scripts\profile_delete.txt"

  • Where SRVNAME is the name of the server where you want to delete the profiles.

    The redirection (>) in that command line acts to create (or append) a text file named profile_delete.txt that will act to log the deletions.
  • Save it as delete_all_profiles.bat and save it in D:\Scripts
  • Create a scheduled job and run delete_all_profiles.bat at the desired time.
    I suggest using a batch file and setting up a scheduled task as that lets the script run with the necessary permissions.


Here is the code for the script file: delete_profiles.vbs

[code]

On Error Resume Next

args = WScript.Arguments.Count

If args <> 1 Then
  WScript.Echo "usage: delete_profiles SVRNAME"
  WScript.Echo "example (for remote profiles): cscript.exe delete_profiles SOMESERVER  "
  WScript.Echo "example (for local profiles): cscript.exe delete_profiles .  "
  WScript.Quit
End If

strComputer = WScript.Arguments.Item(0)
Set objWMIService = GetObject("winmgmts:\\" & strComputer &"\root\cimv2")
Set colProfiles = objWMIService.ExecQuery("Select * from Win32_UserProfile")
Wscript.Echo "==" & WScript.Arguments.Item(0) & "==" & vbNewLine

For Each objProfile in colProfiles
  Set objSID = objWMIService.Get("Win32_SID.SID='" & objProfile.SID &"'")
      If (objSID.ReferencedDomainName = "DOMAIN NAME") Then
      If Not ((objSID.AccountName = "USERNAME TO EXCLUDE") Or (Left (objSID.AccountName,2) = "USERNAME PREFIX TO EXCLUDE")) Then
          Set objUserProfile = GetObject("winmgmts:{impersonationlevel=impersonate}!\\" _
          & strComputer &"\root\cimv2:Win32_UserProfile." _
          &"SID='" & objProfile.Sid &"'")
          objUserProfile.Delete_
     Wscript.Echo objSID.AccountName & ";" & objSID.ReferencedDomainName & ";" & objProfile.LocalPath & " - " & "DELETED"
     End If
End If
Next

[/code]

NOTES: In line 19 you have to specify the domain name to be used in the script and in line 20 you can specify user accounts that shouldn't be deleted, such as Administrator accounts.

Courtesy: KresimiK

PrintEmail

Comments   

 
Roy Piers
0 #18 Roy Piers 2013-08-01 20:14
I think is easier to use delprof2 or with a software ( vtra tsprofcleaner )
Quote
 
 
Ganesan K
0 #17 Ganesan K 2011-08-30 14:00
Thanks for sharing nice techie info for ours.. keep posted buddy....
Quote
 
 
Nik
0 #16 Nik 2011-06-03 12:41
Script seems fine. Do you have Admin Permission on the target machine?
Quote
 
 
Nik
0 #15 Nik 2011-06-01 13:31
Hi Adam,
please check that you did everything right.
You can also attach your script so I can download and check.
Quote
 
 
Adam
0 #14 Adam 2011-06-01 13:28
I am trying to get this to work but the profiles do not appear to be deleting. In the log file, the output only shows the server name. Any thoughts?
Quote
 
 
Josh
0 #13 Josh 2011-01-12 17:13
How do I do this for multiple usernames I want to ignore?

And additionally is it easy to add a function such as (older than 7 days)? now that I've found your script classes have started this week and I need to delete all the student accounts older than a week ago.
Quote
 
 
Matt
0 #12 Matt 2010-12-14 21:22
I got it to work! I needed to take the quotes out of the .bat file...duh moment. I am by no means a script guru. It successfully worked on two terminal servers!

Thanks again!
Quote
 
 
Nik
0 #11 Nik 2010-12-10 19:58
Your domain account has to be local administrator on the target machine.
I've tried the script and the script successfully deleted all of the profiles that currently were not in use on the target machine.
Quote
 
 
Matt
0 #10 Matt 2010-12-10 19:56
Where do I set those permissions?

Do I just make a local admin account that matches my domain account name?
Quote
 
 
Nik
0 #9 Nik 2010-12-10 08:28
Check if you have admin permissions on the target machine.

Make sure to run script like this:

Cscript.exe delete_profiles .vbs TARGETMACHINE > deleted.txt

Also, run CMD in elevated mode if you have UAC turned on.
Quote
 

Add comment


Security code
Refresh