VBScript中如何正确引用wbemErrAccessDenied错误常量?
解决VBScript连接Exchange时错误判断失效的问题
问题根源
你碰到的错误是因为objSWbemLocator对象并不直接提供wbemErrAccessDenied这个属性——WMI的错误常量在VBScript里无法通过对象实例直接引用,必须手动定义常量或者直接使用对应的错误数值。
两种可行的解决方法
方法1:手动定义错误常量
在脚本开头添加常量定义,之后就能像你原本的写法一样用常量名做判断:
' 定义WMI访问拒绝错误的常量 Const wbemErrAccessDenied = &H80041003 '----- Get a connection to the Exchange Server ----- Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") Set objSWbemServices = objSWbemLocator.ConnectServer(sServer, "Root\CIMv2", gsUser, gsPassword) If Err.Number <> 0 Then If Err.Number = wbemErrAccessDenied Then ' 这里添加访问被拒绝时的处理逻辑 WScript.Echo "访问被拒绝,请检查用户名和密码" Else ' 处理其他类型的错误 WScript.Echo "连接失败,错误代码:" & Err.Number & ",错误描述:" & Err.Description End If Err.Clear ' 清除当前错误状态 End If
方法2:直接使用错误数值判断
如果不想定义常量,也可以直接用wbemErrAccessDenied对应的十六进制数值&H80041003(或十进制的2147749891)进行比较:
'----- Get a connection to the Exchange Server ----- Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") Set objSWbemServices = objSWbemLocator.ConnectServer(sServer, "Root\CIMv2", gsUser, gsPassword) If Err.Number <> 0 Then If Err.Number = &H80041003 Then ' 直接用访问拒绝错误的数值判断 ' 访问被拒绝的处理逻辑 WScript.Echo "访问被拒绝,请检查用户名和密码" Else ' 其他错误的处理逻辑 WScript.Echo "连接失败,错误代码:" & Err.Number & ",错误描述:" & Err.Description End If Err.Clear End If
补充说明
WMI的错误常量数值可通过官方文档查询,比如wbemErrAccessDenied对应的就是0x80041003。由于VBScript不会自动引用WMI的类型库,所以必须手动定义常量或直接使用数值,才能正确完成错误类型判断。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

