【问题标题】:Error 2147463168 when trying to bind to an AD User Object尝试绑定到 AD 用户对象时出现错误 2147463168
【发布时间】:2014-08-05 18:54:41
【问题描述】:

我正在使用 Windows 2012(不是 R2 且无法升级)AD 环境。当我使用管理员(不是管理员)帐户从 vbscript 运行以下代码时,它运行完美。但是,当我用普通用户运行它时,我得到一个 -2147463168,这似乎是一个绑定错误。

On error Resume next
UsuariosLDAP = "LDAP://" & objSysInfo.UserNameSet
ObjUser = GetObject(UsuariosLDAP)
If err.number <> 0 then
    strTipoError = "Error buscando objeto en LDAP " & CStr(Err.Number) & " Usuario:" &    objSysInfo.UserName
    shell.logevent 1, strTipoError 
    Wscript.Quit
end if    

由于它使用管理员帐户正常运行,我会假设(寻找其他选项)这是一个权限问题。问题是这是一个由所有用户执行的登录脚本,所以我对修改所有 AD 对象的权限有点谨慎,除非我真的必须这样做。另一件事是我之前做过几次类似的事情(用普通用户查询 UserObject)并且它总是正常工作。我不确定 2012 年发生了什么改变来打破这一点。

提前多谢

【问题讨论】:

    标签: vbscript active-directory ldap-query


    【解决方案1】:
    // MessageId: E_ADS_BAD_PATHNAME
    //
    // MessageText:
    //
    //  An invalid directory pathname was passed
    //
    #define E_ADS_BAD_PATHNAME               _HRESULT_TYPEDEF_(0x80005000L)
    

    来自 ADSErr.h

    解码错误

    -2147220978 样式数字是32位有符号整数,用计算器转换成十六进制。

    Windows 错误(较小的数字)和 COM HResults(通常,但也有例外,以 8 开头,如 0x80040154)在 WinError.h 中定义,除了 8007nnnn,您可以在其中查找它包含的 Window 错误号。

    作为一般规则,Windows 错误少于 65,535 (0xFFFF)。从 0x80000001 开始的错误是组件对象模型 (COM) HResults。从 0xc0000001 开始的错误是 NTStatus 结果。

    NTStatus 错误(通常但不总是以 C 开头,如 0xC0000022)在 NTStatus.h 中定义。

    .h 文件是最好的来源,因为它包含错误的符号名称,可以提供诸如错误来源之类的线索。 FormatMessage 不给出符号名称,只给出描述。

    您可以通过下载 Platform SDK 获得这些文件(以千兆字节为单位) http://www.microsoft.com/en-us/download/details.aspx%3Fid%3D8279&sa=U&ei=w2IrULDDLsHFmAWbmIHoBg&ved=0CBwQFjAA&usg=AFQjCNHZn9-4f2NnuN9o3UWUsOF3wL7HBQ

    如果您只想要这两个文件,我将它们放在我的 skydrive 上,这样我可以随时随地参考它们。 https://skydrive.live.com/redir?resid=E2F0CE17A268A4FA!121

    注意 Internet 错误 (12,000 - 12,999) 是 Windows 错误,但在 wininet.h 中指定,也可在上面找到。

    在其他 .h 文件中定义了错误。但 99% 都在以上三者中。

    HResults 和 NTStatus 代码的结构

    HResults 中的最高有效位和 NTStatus 中的两个最高有效位设置为错误。因此 Hresults 在错误时开始 8 并且 NTStatus 在错误时开始 C。接下来的 14 位或 15 位是保留的,一些指定设施 - 错误所在的区域。这是读取十六进制时的第三个和第四个数字。 EG 0xnn07nnnn - HResult 设施代码 7 是一个正常的 Windows 错误(从 COM 程序返回 - 因此它作为 HResult 返回)。设备代码在 Winerror.h 中为 HResults 定义,在 NTStatus.h 中为 NTStatus 代码定义。它们是不同的。

    解码 0x8003nnnn 错误

    具有设施代码 3 的 HResults 表示 HResult 包含 OLE 结构化存储错误(0x0 到 0xff)。这些与 Dos 错误代码相同。这些似乎不在 Windows 的头文件中,代码列表在本文末尾。

    解码 0x8004nnnn 错误

    具有设施代码 4 的 HResults 表示 HResult 包含 OLE 错误(0x0 到 0x1ff),而范围的其余部分(0x200 以后)是组件特定的错误,因此来自一个组件的 20e 与来自另一个组件的 20e 具有不同的含义。

    这就是为什么错误的来源对于 0x80040200 以上的错误尤为重要。

    解码 0x8007nnnn 错误

    带有设施代码 7 的 HResults 表示 HResult 包含 Windows 的错误代码。您必须查找 Windows 的错误代码而不是 HResult。

    解码 0x80070002。 0x 表示它是一个十六进制数,8 表示错误,前 7 表示它是 windows 错误,其余的数字 2 是实际的 windows 错误。

    要查找错误,我们需要十进制格式。启动计算器(开始 - 所有程序 - 附件 - 计算器)并选择查看菜单 - 科学,然后选择查看菜单 - 十六进制。输入 2。然后查看菜单 - 十进制。它会说 2。

    启动命令提示符(开始 - 所有程序 - 附件 - 命令提示符)并键入

    net helpmsg 2
    

    它会说

    The system cannot find the file specified.
    

    或在 winerror.h 中查找

    //
    // MessageId: ERROR_FILE_NOT_FOUND
    //
    // MessageText:
    //
    // The system cannot find the file specified.
    //
    #define ERROR_FILE_NOT_FOUND             2L
    

    解码 0x8019nnnn 错误

    设施 0x19 的 HResults 是 HTTP 错误。 16384(0x4000)下的代码与HTTP错误相同,例如HTTP状态404:服务器上不存在请求的URL是0x80190194(0x194 = 404)。代码 16,384 及更高版本是 BITS 特定的。

    Dos 错误代码(针对 0x8003nnnn 错误)

    Code Message 
    01 Invalid function number 
    02 File not found 
    03 Path not found 
    04 Too many open files (no handles left) 
    05 Access denied 
    06 Invalid handle 
    07 Memory control blocks destroyed 
    08 Insufficient memory 
    09 Invalid memory block address 
    0A Invalid environment 
    0B Invalid format 
    0C Invalid access mode (open mode is invalid) 
    0D Invalid data 
    0E Reserved 
    0F Invalid drive specified 
    10 Attempt to remove current directory 
    11 Not same device 
    12 No more files 
    13 Attempt to write on a write-protected diskette 
    14 Unknown unit 
    15 Drive not ready 
    16 Unknown command 
    17 CRC error 
    18 Bad request structure length 
    19 Seek error 
    1A Unknown media type 
    1B Sector not found 
    1C Printer out of paper 
    1D Write fault 
    1E Read fault 
    1F General failure 
    20 Sharing violation 
    21 Lock violation 
    22 Invalid disk change 
    23 FCB unavailable 
    24 Sharing buffer overflow 
    25 Reserved 
    26 Unable to complete file operation (DOS 4.x) 
    27-31 Reserved 
    32 Network request not supported 
    33 Remote computer not listening 
    34 Duplicate name on network 
    35 Network name not found 
    36 Network busy 
    37 Network device no longer exists 
    38 NetBIOS command limit exceeded 
    39 Network adapter error 
    3A Incorrect network response 
    3B Unexpected network error 
    3C Incompatible remote adapter 
    3D Print queue full 
    3E No space for print file 
    3F Print file deleted 
    40 Network name deleted 
    41 Access denied 
    42 Network device type incorrect 
    43 Network name not found 
    44 Network name limit exceeded 
    45 NetBIOS session limit exceeded 
    46 Temporarily paused 
    47 Network request not accepted 
    48 Print or disk redirection is paused 
    49-4F Reserved 
    50 File already exists 
    51 Reserved 
    52 Cannot make directory entry 
    53 Fail on INT 24 
    54 Too many redirections 
    55 Duplicate redirection 
    56 Invalid password 
    57 Invalid parameter 
    58 Network device fault 
    59 Function not supported by network (DOS 4.x) 
    5A Required system component not installed (DOS 4.x) 
    

    设施代码

    NTStatus Facilities  HResults Facilities  
    Common status values 0x0 Null 0x0 
    Debugger 0x1 Rpc 0x1 
    Rpc_runtime 0x2 Dispatch 0x2 
    Rpc_stubs 0x3 Storage 0x3 
    Io_error_code 0x4 Itf 0x4 
    Various drivers 0x5-0xf Win32 0x7 
    Ntwin32 0x7 Windows 0x8 
    Ntsspi 0x9 Sspi 0x9 
    Terminal_server 0xa Security 0x9 
    Faciltiy_mui_error_code 0xb Control 0xa 
    Usb_error_code 0x10 Cert 0xb 
    Hid_error_code 0x11 Internet 0xc 
    Firewire_error_code 0x12 Mediaserver 0xd 
    Cluster_error_code 0x13 Msmq 0xe 
    Acpi_error_code 0x14 Setupapi 0xf 
    Sxs_error_code 0x15 Scard 0x10 
    Transaction 0x19 Complus 0x11 
    Commonlog 0x1a Aaf 0x12 
    Video 0x1b Urt 0x13 
    Filter_manager 0x1c Acs 0x14 
    Monitor 0x1d Dplay 0x15 
    Graphics_kernel 0x1e Umi 0x16 
    Driver_framework 0x20 Sxs 0x17 
    Fve_error_code 0x21 Windows_ce 0x18 
    Fwp_error_code 0x22 Http 0x19 
    Ndis_error_code 0x23 Usermode_commonlog 0x1a 
    Hypervisor 0x35 Usermode_filter_manager 0x1f 
    Ipsec 0x36 Backgroundcopy 0x20 
    Maximum_value 0x37 Configuration 0x21 
      State_management 0x22 
      Metadirectory 0x23 
      Windowsupdate 0x24 
      Directoryservice 0x25 
      Graphics 0x26 
      Shell 0x27 
      Tpm_services 0x28 
      Tpm_software 0x29 
      Pla 0x30 
      Fve 0x31 
      Fwp 0x32 
      Winrm 0x33 
      Ndis 0x34 
      Usermode_hypervisor 0x35 
      Cmi 0x36 
      Windows_defender 0x50 
    

    【讨论】:

    • 您好,感谢您的回复。在这里发布之前,我还查找了错误代码并发现了这个:selfadsi.org/errorcodes.htm,这就是我要求其他经验的原因,因为我很确定代码是正确的。无论如何谢谢你的信息
    【解决方案2】:

    查看代码后,错误处理似乎隐藏了与解析 memberof 属性有关的真正错误。一旦我修改了错误处理,我就检测到了原始错误并纠正了它。

    感谢大家的帮助 干杯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多