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

请求修改PowerShell脚本:删除前验证AD账户是否仍禁用

解决方案:批量删除AD禁用账户前增加状态验证

完全可行,只需要在原脚本中增加账户状态验证逻辑即可。以下是修改后的完整PowerShell脚本:

Import-Module ActiveDirectory
$list = Import-CSV C:\temp\deleteuser.csv
$successLog = 'C:\temp\Account Delete Success.txt'
$failedLog = 'C:\temp\Account Delete Failed.txt'
$skippedLog = 'C:\temp\Account Skipped (Enabled).txt'

# 初始化日志文件(可选,若需要清空历史记录则取消注释)
# Clear-Content $successLog -ErrorAction SilentlyContinue
# Clear-Content $failedLog -ErrorAction SilentlyContinue
# Clear-Content $skippedLog -ErrorAction SilentlyContinue

foreach ($item in $list) {
    $samAccountName = $item.samAccountName.Trim() # 去除可能的空格

    try {
        # 获取用户对象,同时获取启用状态
        $user = Get-ADUser -Identity $samAccountName -Properties Enabled -ErrorAction Stop

        if (-not $user.Enabled) {
            # 账户仍处于禁用状态,执行删除
            Remove-ADObject -Identity $user.DistinguishedName -Confirm:$false -ErrorAction Stop
            "[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')] Remove successful for $samAccountName" | Out-File $successLog -Append
        }
        else {
            # 账户已启用,跳过删除并记录
            "[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')] Skipped - Account $samAccountName is now enabled" | Out-File $skippedLog -Append
        }
    }
    catch {
        # 捕获所有错误(如账户不存在、权限不足等)
        "[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')] Remove failed for $samAccountName - Error: $($_.Exception.Message)" | Out-File $failedLog -Append
    }
}

关键改动说明:

  • 状态验证:通过Get-ADUser直接获取账户的Enabled属性,判断是否仍处于禁用状态,避免误删已启用的账户
  • 日志优化:增加时间戳便于追溯操作记录;新增专门的跳过日志文件,清晰区分已启用账户的情况
  • 错误处理:统一捕获所有异常,日志中记录具体错误信息,方便排查问题
  • 效率提升:一次AD查询获取所需所有属性,避免重复查询目录服务

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:55:19