Clean Up Of User Profiles

Clean Up Of User Profiles

2014, Jan 24    
#
#    $Author: Berry $
#    $Rev: 2.1 $
#
#    Version control:
#    1.0 	Initial version in powershell scripting
#    2.0	Complete rewritten and using REMPROF.EXE
#    2.1	Added ‘REMPROF.EXE /AD:0’ to remove all abandoned registry and directory entries
#
#    Functionality:
#    Rotating the log file
#    Cleaning the C:\Users folder
#    Cleaning the Profile list registry
#

[string]$SystemDrive = Get-Content ENV:SystemDrive
[string]$LogFolder = $SystemDrive+”\Logfiles\”
[string]$LogFile = “_Cleanup_log.txt”
[string]$LogFileDate = get-date -format “dd-MM-yyyy”
[string]$LogFileName = $LogFolder + $LogFileDate + $LogFile

#
# Start of function definitions
#

Function LogAction
{
#    Take parameter, string value, as action to log.
Param([string]$a)
#    Determine actual date/time
[string]$LogDate = Get-Date -format “dd-MM-yyyy HH:mm:ss.ms”
#    Write the actual date/time and parameter to the log file
Add-Content -path $LogFileName -value “$LogDate – $a”
}

Function LogRotate
{
#    Take parameter, an integer value, as days to keep
param([int]$a)
#    Check for logfiles older than <$a> days
LogAction “—————————————————-”
LogAction “Starting to rotate log files”
#    Define variable $DaysToKeep as integer value
[int]$DaysToKeep = $a
#    Determine todays date minus 90 $daysToKeep value
$CompareDate = (Get-Date).AddDays(-$DaysToKeep)
#    Harvest a list of log files which are older than $DaysToKeep days
Get-ChildItem $LogFolder\*$LogFile | Where-Object {$_.LastWriteTime -lt $CompareDate} | Remove-Item
LogAction ”   Finished to rotating log files”
}

Function CleanUpUserProfileDir
{
#    Write logging information
LogAction “* Starting housekeeping on the filesystem *”
$CurrentUserName = Get-Content ENV:UserName

$query = Get-Childitem C:\Users
foreach ($global:record in $query )
{
[Array]$records += $record.Name
}

[array]$Global:skip = “Administrator”, “All Users”, “AltirisAdmin”, “Ctx_StreamingSvc”, “Default”, “Default User”, “Public”, “TEMP”
$skip += Get-Content ENV:USERNAME
foreach ($record in $records)
{    $record = $record.Split(“.”)[0]
if ($skip -notcontains $record)
{
LogAction “Profile for $record will be deleted”
C:\Tools\RemProf.exe `””$record`”” | find /i `””$record`”” | Out-File $LogFileName -Append -Encoding ASCII
}
else
{
LogAction “Profile for $record will be preserved”
}
}
LogAction “Deleting all user profiles that have no username association including abandoned profile folders.”
C:\Tools\RemProf.exe | Out-File $LogFileName -Append -Encoding ASCII
LogAction “* Finished housekeeping on the filesystem *”
}

#
# End of function definitions
#

#
# Start of main routine
#
# Do house keeping on the logfiles by removing files older than $DaysToKeep
LogRotate 90 #DaysToKeep

CleanUpUserProfileDir

#
# End of main routine
#