Скрипт для удаления профилей пользователей старше X дней - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь создать сценарий 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 оказалось бесполезным.(До сих пор не уверен, что это меняет)

...