在Active Directory中创建计算机对象时直接禁用的实现问题
解决创建AD计算机对象时直接禁用的属性问题
我来帮你搞定这个问题!你遇到的报错其实是因为对AD属性的底层逻辑理解有偏差,咱们一步步理清楚:
为什么用-OtherAttributes设置Enabled会报错?
你说得没错,Enabled确实在AD管理工具里能看到,但它不是AD数据库中实际存储的原生属性——它是一个「构造属性」,是系统通过userAccountControl这个核心属性计算出来的友好展示值。所以你没法直接通过-OtherAttributes来设置它,这就是报错“指定的目录服务属性或值不存在”的原因。
正确的实现方法:直接操作userAccountControl
要在创建计算机对象时直接禁用,你需要修改userAccountControl的值:
- 计算机对象的默认
userAccountControl值是4096(对应WORKSTATION_TRUST_ACCOUNT) - 禁用账户需要加上
2(对应ACCOUNTDISABLE),最终值为4098
示例命令(PowerShell)
直接指定-UserAccountControl参数:
New-ADComputer -Name "TestPC01" -SamAccountName "TestPC01$" -UserAccountControl 4098 -Path "OU=Computers,DC=yourdomain,DC=com"
如果一定要用-OtherAttributes参数,也可以直接传入userAccountControl:
New-ADComputer -Name "TestPC01" -SamAccountName "TestPC01$" -OtherAttributes @{'userAccountControl'=4098} -Path "OU=Computers,DC=yourdomain,DC=com"
补充说明
你之前能通过其他方法实现禁用,大概率是先创建计算机对象,再用Set-ADComputer -Enabled $false来修改——这是可行的,因为Set-ADComputer会自动把Enabled的设置转换成对应的userAccountControl值。但在创建阶段,必须直接操作底层的userAccountControl属性才行。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

