<#
Clean-Profiles.ps1
PW 20210702
Wist oude profielmappen in C:\Users .
Te runnen op werkstations die vollopen met oude profielmappen.
Run als administrator.
Dit script is geconverteerd naar een module van het scriptsysteem in \\bcfs4\deployables\systemscripts.
Het ruimte uitsluitende de oude gebruikersprofielen op.
Dit is een langzame taak op een volle computer waarop normaliter
zo'n 100 tot 200 profielmappen staan van diverse gebruiker, waar door deze te verwijderen
een winst van ongever 50 GB gehaald kan worden.
#>
$script:totalewinst = 0
function Send-Debuglog([string]$boodschap) {
write-host "[Send-Debuglog]" $boodschap
}
function WisGrondig ($dir) {
write-host "WisGrondig: $dir"
write-host " Takeown..."
& TAKEOWN /f "$dir" /r /d Y | Out-Null
Write-Host " Icacls..."
& icacls "$dir" /t /c /reset 2>&1 | Out-null
Write-Host " Remove..."
Remove-Item $dir -Recurse -Force -confirm:$False -ea:SilentlyContinue
}
function Freespace {
return (Get-WMIObject Win32_Logicaldisk -filter "deviceid='C:'" ).freespace
}
function MB($i) {
return [int]($i/1MB)
}
function Cleanup-Profiles {
# Wis oude gebruikerprofielen (enorme ruimtewinst)
# Indien er meer dan 20 profielen zijn , die ouder zijn dan 3 maanden,
# dan komen deze in aanmerking om te worden verwijderd.
write-host "*** Cleanup Profiles"
$basedir = "C:\Users"
$teller = 0
$lijst = Get-ChildItem $basedir | `
Sort-Object LastWriteTime | `
Where-Object {$_.LastWriteTime -lt ((Get-Date).AddDays(-30))} | `
Where-Object {$_.Name -notin @('Administrator','Public')} | `
Where-Object {$_.Name -notlike 'Default*'} | `
Where-Object {$_.Name -ne $env:USERNAME}
Write-Host "Aantal profielen om op te ruimen:" $lijst.count
$startfree = FreeSpace
# Actie start
foreach ($d in $lijst) {
$teller += 1
WisGrondig $d.FullName
Write-Host " Er is nu $(MB(freespace)) vrije ruimte"
}
# Actie einde
$endfree = Freespace
$script:totalewinst += $endfree - $startfree
Send-Debuglog " Cleanup Profiles: $(MB($endfree - $startfree)) MB"
}
function Cleanup-Temp {
# Wis alles in C:\Windows\Temp ouder dan 2 dagen
# Geen permissies resetten op deze mappen
Write-Host "*** Cleanup Temp"
if ((Freespace) -gt 5GB) {
Write-host " skipped"
return
}
$startfree = FreeSpace
$teller = 0
$basedir = $env:windir + "\Temp"
# Actie start
foreach ($d in (Get-ChildItem $basedir)) {
if ($d.LastWriteTime -lt ((Get-Date).AddDays(-2))) {
$teller += 1
Remove-Item $d.FullName -Recurse -Force -confirm:$False -ea:SilentlyContinue | Out-Null
}
}
# Actie einde
$endfree = Freespace
$script:totalewinst += $endfree - $startfree
Send-Debuglog " Cleanup Temp: $(MB($endfree - $startfree)) MB"
}
Cleanup-Temp
Cleanup-Profiles
if ($totalewinst -gt 0) {
Send-Debuglog " Totale winst $(MB($totalewinst)) MB"
}