VBScript读取Active Directory指定账号无效问题求助(错误800A0046)
解决VBScript读取Active Directory时的身份验证问题(错误800A0046)
我之前也碰到过一模一样的问题,咱们来拆解下这个情况:错误800A0046本质就是身份验证失败或者权限不足,核心问题出在当你用本地管理员账号运行脚本时,脚本根本没用上你指定的域账号,反而默认用了本地管理员的身份——而本地管理员是机器本地账号,本身没有访问域Active Directory的权限(除非它同时是域成员账号,但显然你的情况不是)。
下面给你几个针对性的解决方案,按顺序试试:
1. 确保脚本里的账号格式完全正确
AD账号必须用域\用户名(比如CORP\john.doe)或者UPN格式(比如john.doe@corp.com),绝对不能只写单纯的用户名(比如john.doe)。很多人在这里踩坑,脚本里的账号格式不对,导致凭据无法被AD识别。
2. 检查脚本的AD连接逻辑,确保正确传递凭据
如果你的脚本用的是ADsOpenObject(推荐显式传递凭据的方式),一定要把四个参数都写全:LDAP路径、用户名、密码、身份验证标志。比如正确的写法应该是这样:
Const ADS_SECURE_AUTHENTICATION = 1 Dim objAD ' 替换成你的AD路径、账号、密码 Set objAD = GetObject("LDAP://rootDSE").OpenDSObject( _ "LDAP://OU=Users,DC=corp,DC=com", _ "CORP\john.doe", _ "YourStrongPassword", _ ADS_SECURE_AUTHENTICATION _ )
如果之前你用的是GetObject不带凭据的写法,那脚本肯定会用当前运行账号(本地管理员)的身份去连接AD,自然会失败。
3. 用RunAs命令以域用户身份运行脚本
如果本地管理员的运行上下文确实有问题,你可以直接用Windows的runas命令,强制以指定的域用户身份启动脚本,比如:
runas /user:CORP\john.doe "cscript your_ad_script.vbs"
这样脚本会直接用域用户的身份运行,绕过本地管理员的限制。
4. 排查AD权限和账号有效性
- 先手动测试:用你脚本里指定的域账号登录一台域机器,打开「Active Directory用户和计算机」,看看能不能正常浏览你要读取的AD数据,确认这个账号本身有读取权限(默认域用户都有,但如果AD做了特殊权限限制的话要检查)。
- 在脚本里加个错误捕获,输出更详细的错误信息,方便排查:
On Error Resume Next ' 你的AD操作代码 If Err.Number <> 0 Then WScript.Echo "错误代码: " & Err.Number & vbCrLf & "错误描述: " & Err.Description Err.Clear End If On Error GoTo 0
内容的提问来源于stack exchange,提问作者Portafreak
相关产品推荐
相关产品推荐

