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

如何用PowerShell按修改时间删除指定OU下的AD用户/计算机对象?

使用PowerShell的Remove-ADObject删除指定OU中符合修改时间的AD对象

前提条件

  • 已安装Active Directory模块(可通过Install-WindowsFeature RSAT-AD-PowerShell安装)
  • 执行脚本的账号拥有删除AD对象及递归访问目标OU的权限
  • 务必先在测试环境验证逻辑,避免生产环境误删

具体实现步骤与脚本示例

1. 定义核心参数

先明确目标OU和修改时间阈值(示例为删除30天前修改过的对象,可按需调整):

# 目标OU的Canonical名称列表
$targetOUs = @(
    "Domain.com/OffBoarded Users",
    "Domain.com/Old Computers"
)

# 计算修改时间阈值(这里设置为30天前,可自定义天数)
$modificationThreshold = (Get-Date).AddDays(-30)

2. 遍历OU并筛选符合条件的对象

通过Canonical名称定位OU,递归查找其中的用户和计算机对象,筛选出修改时间早于阈值的条目:

foreach ($ou in $targetOUs) {
    # 将Canonical名称转换为OU的DistinguishedName(AD模块搜索需要该属性)
    $ouDN = (Get-ADOrganizationalUnit -Filter "CanonicalName -eq '$ou'").DistinguishedName

    # 筛选目标OU及其子容器中修改时间过期的用户
    $expiredUsers = Get-ADUser -SearchBase $ouDN -SearchScope Subtree `
        -Filter { whenChanged -lt $modificationThreshold } -Properties whenChanged

    # 筛选目标OU及其子容器中修改时间过期的计算机
    $expiredComputers = Get-ADComputer -SearchBase $ouDN -SearchScope Subtree `
        -Filter { whenChanged -lt $modificationThreshold } -Properties whenChanged

    # 合并两类待删除对象
    $objectsToDelete = $expiredUsers + $expiredComputers

3. 执行删除操作

遍历待删除对象,调用Remove-ADObject完成删除。注意:

  • -Recursive参数用于删除对象关联的所有子对象(如用户的联系人、计算机的关联记录)
  • 初次测试时去掉-Confirm:$false,手动确认删除列表后再批量执行
foreach ($obj in $objectsToDelete) {
        Write-Host "待删除对象: $($obj.Name) | 最后修改时间: $($obj.whenChanged)"
        # 执行删除,如需跳过确认提示,添加 -Confirm:$false 参数
        Remove-ADObject -Identity $obj.DistinguishedName -Recursive
    }
}

关键注意事项

  • 测试验证:先将Remove-ADObject替换为Write-Host,输出待删除对象列表,确认逻辑无误后再执行删除
  • 时间字段:若whenChanged不符合需求,可改用LastModified属性(部分AD环境启用该扩展属性),对应修改Filter即可
  • 权限排查:若出现权限报错,需检查执行账号在目标OU的权限设置,确保拥有「删除所有对象」「递归控制」权限

内容的提问来源于stack exchange,提问作者Senior Systems Engineer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 23:18:24