Často se v doménových počítačích setkáš se situací, kdy se na jednom počítači přihlásí více uživatelských účtů. Každé takové interaktivní přihlášení vytváří ve složce C:\Users složky s uživatelskými daty uživatelů, které se kopírují z výchozího profilu a nedej bože když tento uživatel něco spouští (vytváří se AppData), nebo má například propojený OneDrive a začnou se do počítače někoho jiného sypat jeho cloudová data. Tyto profily pak zabírají zbytečně místo na disku a leží tam klidně po celou dobu životnosti OS počítače.
Dnes si ukážeme jednoduchý návod jak tyto profily mazat.
Úvod do uživatelských profilů Windows
Každý uživatel co se přihlásil interaktivně na počítači s Windows má svojí složku v C:\Users\UserName tato složka při vytvoření vychází z výchozího uživatelského profilu, jsou vytvořeny soubory (plocha, dokumenty atd.) a registry daného uživatele (HKEY_CURRENT_USER).
Mazání se nesmí provádět pouze smazáním uživatelského adresáře z C:\Users! Je to z důvodu, že informace o uživatelském profilu jsou i v registrech, WMI databázi a odstranění pouze souborů by nebylo pro systém korektní a mohlo by způsobovat problémy.
Mazání může samozřejmě provádět pouze Administrátor dané stanice.
Mazání můžeme provádět přes GUI, nebo přes Powershell.
Jak smazat uživatelský profil přes GUI Windows
- Spustit program zkratka Win+R
- Zadej název: SystemPropertiesAdvanced
- Vyber Profily Uživatelů – tlačítko Nastavení
- Vyber profil, který chceš vymazat a kliknu na odstranit
Obrázkový návod krok za krokem:



Jak smazat uživatelské profily přes Powershell
Díky Powershellu si mohu smazání profilů podmínkovat a smazat strojově to co chci podle zadaných kritérií.
Na ukázku jsem připravil script, který vymaže všechny uživatelské profily, které se nepoužily déle než 3 dny. Bohužel Windows i když se účet nějakou dobu nepoužije, tak jeho datum použití nevím jakým principem aktualizuje.
Script má výpis do konzole o jaký účet se jedná a poté je potřeba kliknutím odstranění schválit. Samozřejmě je potřeba spouště pod administrátorem.
#načte všechny profily uživatelů
$profiles = Get-WMIObject -class Win32_UserProfile
foreach ($profile in $profiles) {
#datum posledního použítí
$lastUseTime = $profile.LastUseTime
#konverze data do formátu pro porovnání
$lastUseTimeDate = [System.Management.ManagementDateTimeConverter]::ToDateTime($lastUseTime).ToUniversalTime();
#maže vše starší než 3dny od aktuálního data
if ($lastUseTimeDate -lt (Get-Date).AddDays(-3)) {
#uživatelské jméno získané z názvu adresáře
$userName = Split-Path -Path $profile.LocalPath -Leaf
write-host "Bude smazán profil uživatele: $userName"
Get-WMIObject -class Win32_UserProfile | Where-Object -Property SID -EQ $profile.SID | Remove-WmiObject -Confirm
}
}