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

PowerShell AD账号自动启停脚本如何避免封禁指定用户组成员

实现方案

核心逻辑:提前定义免封禁用户组,每次处理禁用操作前先校验当前用户是否属于该组,只有不属于且到达禁用日期才执行禁用操作。

关键修改说明

  • 提前定义免封禁组变量,后续调整免封禁规则直接修改该值即可
  • 调用Get-ADPrincipalGroupMembership时传入当前用户的$SamAccountName作为参数,获取用户所属的所有组
  • 禁用的判断逻辑调整为:禁用日期匹配当前日期 AND 用户不属于免封禁组

修正后完整代码

# 定义免封禁用户组,有多个免封禁组直接往数组里加名称即可
$nonBlockGroups = @("PLKAT-NON-BLOCK-USERS")
$currentDate = (Get-Date).ToString('M/d/yyyy')

Import-Csv "I:\Clients\Block Accounts\Accounts Deactivation.csv" | ForEach-Object {
    $SamAccountName = $_.SamAccountName
    $dateDisable = $_.dateDisable
    $dateEnable = $_.dateEnable

    # 先校验用户是否存在,避免CSV填错用户名导致脚本报错
    $adUser = Get-ADUser -Filter {SamAccountName -eq $SamAccountName} -ErrorAction SilentlyContinue
    if (-not $adUser) {
        Write-Host "用户 $SamAccountName 不存在,跳过处理"
        return
    }

    # 禁用逻辑校验
    if ($dateDisable -eq $currentDate) {
        # 获取用户所有所属组的名称
        $userGroups = Get-ADPrincipalGroupMembership -Identity $SamAccountName | Select-Object -ExpandProperty Name
        # 判断是否属于免封禁组
        $isNonBlock = $nonBlockGroups | Where-Object {$_ -in $userGroups}
        if (-not $isNonBlock) {
            Disable-ADAccount -Identity $adUser
            Write-Host "-用户 $SamAccountName 已禁用"
        } else {
            Write-Host "-用户 $SamAccountName 属于免封禁组,跳过禁用操作"
        }
    }

    # 启用逻辑不受免封禁组限制,正常执行
    if ($dateEnable -eq $currentDate) {
        Enable-ADAccount -Identity $adUser
        Write-Host "-用户 $SamAccountName 已启用"
    }
}

额外优化说明

  • 新增用户存在性校验,避免错误输入导致脚本中断
  • 操作日志覆盖了免封禁跳过的场景,方便运营人员回溯操作
  • 如果存在嵌套组需求(比如用户所属的子组属于免封禁组),可以把组成员查询逻辑替换为递归查询即可,当前写法适配绝大多数普通场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:36:00