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

使用PowerShell读取AD中AllowLogon属性显示信息不准确如何解决

问题根因

  • 你当前脚本读取的是ADSI本地缓存的属性值,不是AD实际存储的属性,所以即使实际写入失败,也会返回你刚设置的0值,误报修改成功
  • 受保护用户组(域管理员、企业管理员等)的属性会被AD的SDProp进程定期重置,手动修改会被覆盖
  • 你运行脚本的账号对部分用户所在OU没有userParameters属性的写入权限,ADSI默认会静默忽略权限错误,不会抛出异常
  • 部分用户的RDS登录权限继承自OU级别的组策略或用户配置模板,用户级的设置会被上级配置覆盖

修正后的脚本

# 读取用户SamAccountName列表
$ADUsers = Get-Content "C:\PSTOOLS\Passwordneverexpire\disable-enbale deny logon.txt"

ForEach ($User in $ADUsers) {
    try {
        $adUser = Get-ADUser -Identity $User -Properties AllowLogon -ErrorAction Stop
        # 设置AllowLogon属性为0,即拒绝RDS登录
        $adUser.AllowLogon = 0
        Set-ADUser -Instance $adUser -ErrorAction Stop
        
        # 重新从AD查询属性,确认修改生效
        $verifyUser = Get-ADUser -Identity $User -Properties AllowLogon
        if ($verifyUser.AllowLogon -eq 0) {
            Write-Host "$User 已成功设置为拒绝RDS登录"
        } else {
            Write-Host "$User 修改失败,当前AllowLogon属性值为:$($verifyUser.AllowLogon)"
        }
    }
    catch {
        Write-Host "$User 处理失败:$_"
    }
}

额外排查步骤

  • 如果是受保护组用户需要修改,需要先调整AD的AdminSDHolder配置,或者单独对这些用户设置排除
  • 检查用户所在OU的组策略,确认没有强制配置RDS登录权限的策略
  • 确认运行脚本的账号拥有所有目标用户对象的写入所有用户属性权限,或者至少对userParameters属性有写入权限
  • 修改完成后等待AD域控同步完成后再验证属性,避免跨域控查询的同步延迟问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 05:36:08