Назад | Перейти на главную страницу

Сценарий для удаления профиля пользователя, которому всего несколько месяцев, с самим реестром, но должен оставить текущий профиль нетронутым

Прежде всего, прошу прощения, если этот пост повторяется для удаления профиля.

Если у вас есть правильная ссылка, опубликуйте ее ниже или сам скрипт.

Вопрос: поскольку у меня много компьютеров с Windows 7 (системы 2400) в качестве операционной системы на них, и пользователи продолжают менять или переносить место с одного ПК на другой и управлять системой или диском C для согласованной системы производительность или освобождение места - сложная задача.

Я хотел бы иметь скрипт, который удалял бы только старый профиль (количество месяцев), а также сам реестр, но при этом должен сохранять текущий профиль, также создавая экземпляр реестра.

Я нашел сценарий на каком-то форуме, который выполняет свою работу, но не правильно, поскольку он удаляет весь профиль и исключает администратора, администратора и т.д. в сценарии, но я не могу удалить старый профиль определенного периода времени или даты.

Еще раз извините, если этот пост выглядит беспорядочно, но помощь приветствуется

Если ваши рабочие станции присоединены к домену и у вас есть доступ для изменения групповых политик, то все это можно указать в GPO;

Конфигурация компьютера | Политика | Административные шаблоны | Система | Профили пользователей

В качестве альтернативы вы должны посмотреть delprof2 (https://helgeklein.com/free-tools/delprof2-user-profile-deletion-tool/), это сделает то, что вам нужно.

Это инструмент командной строки (так что вы можете создать его сценарий) и принимает параметр, чтобы указать, сколько лет должно быть профилю, прежде чем его можно будет удалить. Например, эта команда удалит все локальные профили старше 60 дней;

delprof2 /d 60

Он также имеет больше применений, таких как удаление только профилей, которые являются локальными кэшами перемещаемых профилей (игнорирование настоящих локальных профилей), удаленное удаление профилей (так что вы потенциально можете создать сценарий для его запуска с сервера и нацеливания на каждую из ваших рабочих станций по очереди), сопоставление шаблонов для включения / исключения, чтобы вы могли указать ему игнорировать определенные профили (например, все учетные записи, начинающиеся с john *).

Во многих случаях это также бесплатно (цитирую)

«Delprof2 бесплатен для частного использования, для образовательных и некоммерческих организаций. Все другие организации также могут использовать Delprof2 бесплатно, если они позволят нам опубликовать свое имя. В противном случае необходимо приобрести коммерческую лицензию».

Это помогает?

Редактировать:

Увидев, что вам нужна дополнительная опция, попробуйте этот сценарий или его модификацию. Нашел на этом форуме (http://www.edugeek.net/forums/windows-7/79028-delete-user-profiles-older-than-specified-number-days.html) и он полностью не протестирован; Используйте на свой риск. Вероятно, вы захотите удалить строку MsgBox, а неиспользованный период можно отрегулировать, изменив значение переменной intMaxProfileAge.

On Error Resume Next

Dim objFSO, objWMIService, strComputer, strFilter, intMaxProfileAge, colProfiles, objProfile, dtmLastUseTime

strComputer = "."
strFilter = "SID Like ""S-1-5-21%"" And Not LocalPath Like ""%Administrator%"""
intMaxProfileAge = 14

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objWMIService = GetObject("Winmgmts:\\" & strComputer & "\root\cimv2") 
Set colProfiles = objWMIService.ExecQuery("Select * From Win32_UserProfile Where " & strFilter)

If Not colProfiles Is Nothing Then
    For Each objProfile in colProfiles
        dtmLastUseTime = CDate(Mid(objProfile.LastUseTime, 7, 2) & "/" & Mid(objProfile.LastUseTime, 5, 2) & "/" & Left(objProfile.LastUseTime, 4) & " " & Mid (objProfile.LastUseTime, 9, 2) & ":" & Mid(objProfile.LastUseTime, 11, 2) & ":" & Mid(objProfile.LastUseTime, 13, 2))
        MsgBox DateDiff("d", dtmLastUseTime, Date)
        If DateDiff("d", dtmLastUseTime, Date) > intMaxProfileAge Then
            Err.Clear

            objProfile.Delete_

            If Err.Number = -2147024809 Then
                'Profile in use, skipping.
            ElseIf Err.Number = -2147024751 Then
                objFSO.DeleteFolder objProfile.LocalPath, True
            ElseIf Err.Number <> 0 Then
                '"Error: " & Err.Number & ": " & Err.Description
            Else
                'Profile Deleted.
            End If
        End If
    Next
End If