Sikkepitje.nl

Sikkepitje.nl

this private cloud

Attach:SpaceMonger.zip

DelProf


<#
    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"
}