Я пытаюсь создать сценарий PowerShell для удаления профилей пользователей на компьютерах Windows (в доменной среде) в течение X дней.(Вероятно, будет X = 60 дней или около того) Вот мой код:
#Requires -RunAsAdministrator
# Program to delete user profiles through Powershell older than 30 days
# User profiles older than today's date - $ of days will be deleted
$numberOfDays = 30
# Number of digits in local path string to just after C:\users\
$pos = 9
# Get all user profiles where the last log on time is older than the current date - $numberOfDays
$profileStructsToRemove = Get-CimInstance Win32_UserProfile |
Where-Object {$_.LastUseTime -lt $(Get-Date).Date.AddDays(-$numberOfDays) } |
Where-Object {$_.LocalPath.ToUpper() -ne 'C:\USERS\ADMINISTRATOR'} |
Where-Object {$_.LocalPath.ToUpper() -ne 'C:\USERS\PUBLIC'}
foreach ($struct in $profileStructsToRemove)
{
$userProfileToDelete = $struct.LocalPath.Substring($pos, $struct.LocalPath.Length - $pos)
Write-Host "Currently deleting profile...$userProfileToDelete..."
(Get-WmiObject Win32_UserProfile -Filter "localpath='C:\\Users\\$userProfileToDelete'").Delete()
}
Мой сценарий работает довольно хорошо, но есть одна проблема.Я использовал поле LastUseTime
в качестве наиболее важной части, чтобы получить только профили старше numberOfdays
.Проблема в том, что после проверки этого поля, но только после запуска Get-CimInstance Win32_UserProfile
, я просмотрел все записи LastUseTime
каждого профиля.Даже в некоторых профилях сотрудников, покинувших компанию (не подписанных на несколько месяцев), есть записи LastUseTime
неделю назад.Как ни странно, многие из этих профилей имеют ТОЧНУЮ часть LastUseTime с точностью до минуты.В принципе, это поле кажется мне бесполезным.В этом поле есть что-то, что не является пользователем.Обновление или что-то в системе, я действительно не уверен.
Что мне нужно: Чтобы найти какую-то замену для LastUseTime
.Мне удалось найти время последнего входа для учетных записей на компьютере, но только для ЛОКАЛЬНЫХ пользователей.В доменной среде это в основном исключает всех.Затем я изучил запросы к учетным записям AD (через AD-User
), но это дает мне информацию о последнем входе в систему для самих профилей (насколько я понимаю), а не для определенного компьютера.
Я просто не могу найти способ найти последний вход в систему или дату последнего использования пользователя в профиле на определенном компьютере.Поле LastUseTime
оказалось бесполезным.(До сих пор не уверен, что это меняет)