En las estaciones de trabajo y servidores de Windows, especialmente en los servidores RDS (Servicios de escritorio remoto), existe una necesidad regular de eliminar los perfiles de usuario antiguos (no utilizados) de C: Users. El principal problema de cualquier servidor de Escritorio remoto es el crecimiento constante del tamaño de los directorios de perfil de usuario en una unidad local. Se resuelve parcialmente habilitando cuotas en el tamaño máximo de perfiles de usuario (con cuotas FSRM o NTFS). Sin embargo, si hay muchos usuarios de Terminal Server, con el tiempo el directorio C: Users acumulará una gran cantidad de directorios con perfiles de usuario que ya no son necesarios.
¿Cómo eliminar un perfil de usuario manualmente en Windows?
Muchos administradores de Windows novatos intentan eliminar manualmente una carpeta de perfil de usuario de C: Usuarios. Puede hacerlo si después de eliminar manualmente la carpeta, eliminará la sección de perfil de usuario con el enlace a esta carpeta desde la clave de registro HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows NT CurrentVersion ProfileList.
La forma correcta de eliminar manualmente un perfil de usuario en Windows es abrir Propiedades del sistema, vaya a Configuración avanzada del sistema -> Perfiles de usuario -> Ajustes, seleccione un usuario en la lista (la columna Tamaño muestra el tamaño del perfil en la unidad local) y haga clic en el Borrar botón.
Pero este es un método manual y es posible que desee automatizarlo.
GPO: eliminar perfiles de usuario anteriores a un número de días especificado
En Windows, hay una política de grupo incorporada para eliminar automáticamente los perfiles de usuario con más de xx días. Puedes encontrar la póliza Eliminar perfiles de usuario con una antigüedad superior a un número de días especificado al reiniciar el sistema en la sección GPO Configuración de la computadora -> Plantillas administrativas -> Sistema -> Perfiles de usuario. Puede habilitar esta política en el Editor de políticas de grupo local (gpedit.msc) o utilizando políticas de dominio en GPMC.msc.
Habilite la política y especifique la cantidad de días que un perfil de usuario se considera activo. Cuando termine este período, el servicio de perfil de usuario de Windows eliminará automáticamente el perfil en el próximo reinicio. Se recomienda especificar el período de 45-90 días aquí.
Los principales problemas asociados con este método automático de eliminación de perfiles es la espera del reinicio del servidor y la no selectividad (no puede prohibir la eliminación de ciertos perfiles de usuario como cuentas locales, cuentas administrativas, etc.). Además, es posible que esta política no funcione si algún software de terceros (la mayoría de las veces es un antivirus) accede al archivo NTUSER.DAT en los perfiles de usuario y actualiza la fecha del último uso.
Script de PowerShell para eliminar perfiles de usuario antiguos en Windows
En lugar de usar la política de perfil de limpieza automática descrita anteriormente, puede usar un simple script de PowerShell para buscar y eliminar perfiles de usuarios desactivados o inactivos.
En primer lugar, intentemos contar el tamaño de todas las carpetas de perfiles de usuario en C: Usuarios usando un script simple del artículo Cómo obtener tamaños de directorio en PowerShell:
gci -force 'C:Users'-ErrorAction SilentlyContinue | ? { $_ -is [io.directoryinfo] } | % {
$len = 0
gci -recurse -force $_.fullname -ErrorAction SilentlyContinue | % { $len += $_.length }
$_.fullname, '{0:N2} GB' -f ($len / 1Gb)
$sum = $sum + $len
}
“Total size of profiles”,'{0:N2} GB' -f ($sum / 1Gb)
El tamaño total de todos los perfiles de usuario en C: Usuarios es 31,5 GB.

Vamos a mostrar la lista de usuarios, cuyos perfiles no se han utilizado durante más de 60 días. Para encontrarlos, puede usar el valor en el campo LastUseTime del perfil.
Get-WMIObject -class Win32_UserProfile | Where {(!$_.Special) -and ($_.ConvertToDateTime($_.LastUseTime) -lt (Get-Date).AddDays(-60))}| Measure-Object
Resultó que tenía 127 cuentas de usuario inactivas en mi host RDS (con un tamaño total de perfiles de aproximadamente 18 GB).

Para eliminar todos estos perfiles, basta con redirigir la lista de usuarios a la Eliminar-WmiObject comando (antes de ejecutar el script, se recomienda verificar su salida usando el parámetro –WhatIf):
Get-WMIObject -class Win32_UserProfile | Where {(!$_.Special) -and (!$_.Loaded) -and ($_.ConvertToDateTime($_.LastUseTime) -lt (Get-Date).AddDays(-30))} | Remove-WmiObject –WhatIf
Para no borrar los perfiles de algunos usuarios, como Sistema y Servicio de red cuentas, un administrador local cuenta, cuentas de usuarios que tienen sesiones activas, cuenta excepción list), puede modificar el script de la siguiente manera:
#The list of accounts, which profiles must not be deleted
$ExcludedUsers ="Public","zabbix_agent","svc",”user_1”,”user_2”
$LocalProfiles=Get-WMIObject -class Win32_UserProfile | Where {(!$_.Special) -and (!$_.Loaded) -and ($_.ConvertToDateTime($_.LastUseTime) -lt (Get-Date).AddDays(-60))}
foreach ($LocalProfile in $LocalProfiles)
{
if (!($ExcludedUsers -like $LocalProfile.LocalPath.Replace("C:Users","")))
{
$LocalProfile | Remove-WmiObject
Write-host $LocalProfile.LocalPath, "profile deleted” -ForegroundColor Magenta
}
}
Puede ejecutar este script de PowerShell con un GPO al apagar o con un script de PoSh en el Programador de tareas.
Antes de configurar la eliminación automática de perfiles, se recomienda probar el script en su entorno.
Puede modificar el script para eliminar automáticamente todos los perfiles de usuario agregados al grupo de AD específico (por ejemplo, el grupo DisabledUsers):
$users = Get-ADGroupMember -Identity DisabledUsers | Foreach {$_.Sid.Value}
$profiles = Get-WmiObject Win32_UserProfile
$profiles | Where {$users -eq $_.Sid} | Foreach {$_.Delete()}





