脚本删除用户配置文件仅包含几个月前的配置文件和注册表本身,但应保留当前配置文件

脚本删除用户配置文件仅包含几个月前的配置文件和注册表本身,但应保留当前配置文件

首先,如果此帖子与删除个人资料有关,我深感抱歉。

如果您有正确的链接,请在下面发布它或脚本本身。

问题:由于我有很多计算机都采用 Windows 7(2400 系统)作为操作系统,并且用户不断在从一台 PC 更换​​或转移到另一台 PC,因此管理系统或 C 盘以保持一致的系统性能或释放空间是一项具有挑战性的任务。

我想要一个脚本,它只会删除旧的(月份数)配置文件以及注册表本身,但也应保留当前配置文件的实例注册表。

我确实在一些论坛上找到了可以完成工作的脚本,但不是正确的方法,因为它会删除所有配置文件并排除脚本中的管理员、管理员等,但我无法删除特定时间或日期范围内的旧配置文件。

如果这篇文章看起来很乱,我们再次深感抱歉,但我们仍感谢大家的帮助

答案1

如果您的工作站已加入域并且您有权修改组策略,那么所有这些都可以在 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

相关内容