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

如何修改PowerShell脚本仅查询指定OU中14天内禁用的AD用户

Got it,我帮你调整这个脚本,刚好能满足你只从特定OU查询最近14天内被禁用用户的需求。先修正原脚本里的小问题,再给你上优化后的版本:

修改后的完整脚本

# 定义查询时间范围:过去14天
$date = (Get-Date).AddDays(-14)
# 替换成你实际要查询的OU的LDAP路径(可在AD用户和计算机中查看OU属性获取)
$targetOU = "OU=SalesTeam,DC=contoso,DC=com"
# 获取一个可用的域控制器(也可以直接指定DC名称,比如"-Server DC01.contoso.com")
$domainController = Get-ADDomainController | Select-Object -First 1

# 第一步:从目标OU中筛选出已禁用的用户,先缩小范围(只保留最近14天有修改的对象)
$candidateUsers = Get-ADObject -SearchBase $targetOU `
    -Filter 'ObjectClass -eq "User" -and UserAccountControl -band 2' `
    -Properties whenChanged | 
    Where-Object { $_.whenChanged -ge $date }

# 第二步:遍历候选用户,获取UserAccountControl属性的实际修改时间(即真正的禁用时间)
foreach ($user in $candidateUsers) {
    Get-ADReplicationAttributeMetadata $user -Server $domainController.Name `
        -Properties UserAccountControl | 
        Where-Object { $_.AttributeName -eq 'UserAccountControl' } | 
        Select-Object `
            @{Name="用户对象"; Expression={$_.Object}},
            @{Name="禁用时间"; Expression={$_.LastOriginatingChangeTime}} |
        Where-Object { $_.禁用时间 -gt $date }
}

关键改动说明

  • 限定查询范围到特定OU:新增-SearchBase参数,直接指定目标OU的LDAP路径,避免扫描整个域,大幅提升查询效率。记得把$targetOU的值替换成你实际需要的OU路径。
  • 修正原脚本的变量错误:原脚本里误用了未定义的$sixMonthsAgo变量,改成了正确的$date。
  • 提前缩小处理范围:在Get-ADObject阶段就先过滤已禁用的用户,并且加上whenChanged的初步筛选,减少后续需要处理的对象数量。
  • 优化输出可读性:用Select-Object重命名字段,让输出的结果更直观易懂。
  • 避免参数类型问题:Get-ADDomainController返回的是对象,所以用$domainController.Name作为-Server参数的值,确保参数格式正确。

额外提示

如果你的环境中有多个域控制器,也可以直接指定某个DC的名称(比如$domainController = "DC01.contoso.com"),这样查询结果会更稳定。

内容的提问来源于stack exchange,提问作者hightest

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:12:28