![脚本删除用户配置文件仅包含几个月前的配置文件和注册表本身,但应保留当前配置文件](https://linux22.com/image/643485/%E8%84%9A%E6%9C%AC%E5%88%A0%E9%99%A4%E7%94%A8%E6%88%B7%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E4%BB%85%E5%8C%85%E5%90%AB%E5%87%A0%E4%B8%AA%E6%9C%88%E5%89%8D%E7%9A%84%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E5%92%8C%E6%B3%A8%E5%86%8C%E8%A1%A8%E6%9C%AC%E8%BA%AB%EF%BC%8C%E4%BD%86%E5%BA%94%E4%BF%9D%E7%95%99%E5%BD%93%E5%89%8D%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.png)
首先,如果此帖子与删除个人资料有关,我深感抱歉。
如果您有正确的链接,请在下面发布它或脚本本身。
问题:由于我有很多计算机都采用 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