Než začnete nadávat v komentářích pod příspěvkem, že se to dá vyřešit pomocí group policy, tak vám dám sice za pravdu, ale pokud potřebujete udělat nějaké výjimky, na nějaké konkrétní uživatele, tak toho už jsem se úplně nedopátral a bylo proto nutné sepsat powershell skript, který problém vyřeší za vás.
Testováno na Windows 10, bude fungovat i na Windows 11. Sice mám mnohem raději bash skriptování, ale doba pokročila a pokud si vytočíte např. jazykový model doma na vlastní kartě a umíte promptit, tak dokážete napsat za pár minut to, co by jinak zkušenému powershellákovi trvalo i jednotky hodin s veškerým odladěním a otestováním a googlením bugů, na které při implementaci narazí.
Následující powershell skript JENOM VYPÍŠE uživatele, kteří spadají do pravidla 90 dní bez přihlášení, ale nic nesmaže a ve výpisu nebudou uživatelé, které nechcete smazat
Tento skript můžete spustit naprosto bezpečně bez obav, že by vám něco zničil, smazal, nebo rozbil.
# Definování data před 90 dny
$90DaysAgo = (Get-Date).AddDays(-90)
# Seznam účtů, které se nesmějí smazat
$excludedUsers = @("UzivatelCoNechciSmazat", "TohotoTakyNemazat", "nesmazatelnyFranta", "NesmazatelnyHonza", "NesmazatelnyAdmin", "NesmazatelnyTestovaciUcet", "DoNoTDeleteThisJoeUser")
# Získání seznamu uživatelských profilů
$userProfiles = Get-WmiObject -Class Win32_UserProfile
foreach ($profile in $userProfiles) {
# Kontrola, zda je poslední použití definováno a vytvoření datového objektu
if (-not [string]::IsNullOrEmpty($profile.LastUseTime)) {
# Převod LastUseTime na datum
$lastLogon = ([wmi]"").ConvertToDateTime($profile.LastUseTime)
# Podmínka pro smazání (poslední přihlášení před 90 dny a ne patří k vynechaným účtům)
if ($lastLogon -lt $90DaysAgo -and $excludedUsers -notcontains [System.IO.Path]::GetFileNameWithoutExtension($profile.LocalPath)) {
Write-Host "Profil určený ke smazání: $($profile.LocalPath) (Poslední přihlášení: $lastLogon)"
}
}
}
Ukázka výstupu skriptu

Skript pro smazání uživatelů
Pozor! Následující skript oproti předchozímu již maže uživatelské profily. Takže používejte s opatrností a tento článek nebere žádnou zodpovědnost ani záruky za smazaná data, která jste smazat nechtěli.

# Definování data před 90 dny
$90DaysAgo = (Get-Date).AddDays(-90)
# Seznam účtů, které se nesmějí smazat
$excludedUsers = @("Uzivatel", "TohotoTakyNemazat", "nesmazatelnyFranta", "NesmazatelnyHonza", "admin", "test", "DoNOTdeleteThisUserName")
# Získání seznamu uživatelských profilů
$userProfiles = Get-WmiObject -Class Win32_UserProfile
foreach ($profile in $userProfiles) {
# Kontrola, zda je poslední použití definováno a vytvoření datového objektu
if (-not [string]::IsNullOrEmpty($profile.LastUseTime)) {
# Převod LastUseTime na datum
$lastLogon = ([wmi]"").ConvertToDateTime($profile.LastUseTime)
# Podmínka pro smazání (poslední přihlášení před 90 dny a ne patří k vynechaným účtům)
if ($lastLogon -lt $90DaysAgo -and $excludedUsers -notcontains [System.IO.Path]::GetFileNameWithoutExtension($profile.LocalPath)) {
Write-Host "Profil určený ke smazání: $($profile.LocalPath) (Poslední přihlášení: $lastLogon)"
# Smazání profilu
if ($profile.Special -eq $false) { # Nezabíráme speciální profily, jako jsou uživatelé systému
$profile.Delete()
Write-Host "Profil smazán: $($profile.LocalPath)"
}
}
}
}
Chci skript spustit lokálně a přesvědčit se co dělá na jednom počítači, než to pustím všude hromadně
klikněte na start / napište powershell / vpravo klikněte na spustit jako správce

Pro koho jsou tyto skripty vhodné
Např. pro adminy menších firem, či školní administrátory, kde z nějakého důvodu nemohou použít group policy z domény, protože mají specifické požadavky na nějaké uživatele, které tam potřebují mít ( i přes inaktivitu delší, než 90 dní) a současně to potřebují mít jen např. na specifické skupiny počítačů, které nemusí být součástí stejné OU (organisational unit) v Active Directory a přesouvání počítačů napříč OU by jim z nějakého důvodu způsobilo víc problémů, než užitku. Skript je spustitelný i na jednotlivých počítačích odděleně.
Počítač bez starostí
Pokud jste v situaci, kdy to nemůžete řešit z nějakého důvodu přes group policy na doméně, tak je vaší cestou vložit tento skript někam na disk a volat ho např. při zapínání windows 1x týdně přes Windows Scheduler. (ekvivalent linuxáckého crontabu).