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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:30:18