You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell删除用户配置脚本:多用户排除失效及时效过滤需求

修复后的多用户配置文件清理脚本

针对你的需求,我修改了脚本以解决多用户排除失效问题,并添加了90天未使用的时效过滤功能,同时优化了逻辑可读性:

完整脚本

# 定义需排除的用户列表(可根据实际添加本地管理员、当前用户、服务账户等)
$excludedUsers = @('Administrator', 'schaudhary', 'LocalService', 'NetworkService')
# 计算90天前的时间阈值
$90DaysAgo = (Get-Date).AddDays(-90)

# 获取系统所有用户配置文件
$allProfiles = Get-CimInstance -Class Win32_UserProfile

foreach ($profile in $allProfiles) {
    $username = $profile.LocalPath.Split('\')[-1]

    # 过滤规则:非特殊配置文件 + 不在排除列表 + 最后使用时间早于90天前
    if ($profile.Special -ne $true -and
        $username -notin $excludedUsers -and
        $profile.LastUseTime -and
        $profile.LastUseTime -lt $90DaysAgo) {
        
        # -WhatIf用于测试,确认无误后可移除该参数执行实际删除
        $profile | Remove-CimInstance -WhatIf
        Write-Host "待删除配置文件: $($profile.LocalPath) | 最后使用时间: $($profile.LastUseTime)"
    }
}

关键问题修复与功能说明

  • 多用户排除逻辑修正:
    原脚本的-notcontains用法逻辑颠倒了——-notcontains是数组判断是否包含单个元素,正确写法是用$username -notin $excludedUsers,同时将排除用户定义为数组@(...),支持批量添加需要保留的用户。

  • 90天时效过滤:
    利用Win32_UserProfile的LastUseTime属性,先计算90天前的时间阈值,再判断配置文件的最后使用时间是否早于该阈值;额外增加$profile.LastUseTime -and判断,避免处理无使用记录的异常配置文件。

  • 实用优化:
    单独提取用户名变量提升可读性;输出信息增加最后使用时间,方便验证过滤逻辑;保留-WhatIf参数用于测试,避免误删。

注意事项

  1. 必须以管理员权限运行脚本,否则无法删除配置文件及关联注册表项。
  2. 测试阶段不要移除-WhatIf,确认输出的待删除列表符合预期后再执行实际删除。
  3. 如需添加当前登录用户到排除列表,可追加:$excludedUsers += $env:USERNAME

内容的提问来源于stack exchange,提问作者Shoaib Ali Chaudhary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 23:55:23