访问Active Directory时发生VBScript错误

访问Active Directory时发生VBScript错误,vbscript,active-directory,Vbscript,Active Directory,好吧,我投降。我正在编写Active Directory中的一些数据脚本,但我遇到了一个无法解决的错误。我的剧本是 'On Error Resume Next Option Explicit dim objConnection dim objCommand dim objRecordset Const ADS_SCOPE_SUBTREE = 2 Set objConnection = CreateObject("ADODB.Connection") Set objCommand = C

好吧,我投降。我正在编写Active Directory中的一些数据脚本,但我遇到了一个无法解决的错误。我的剧本是

'On Error Resume Next
Option Explicit

dim objConnection
dim objCommand
dim objRecordset

Const ADS_SCOPE_SUBTREE = 2

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection

objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 

objCommand.CommandText = _
"SELECT Name, description, distinguishedName, member FROM     'LDAP://ou=mybusiness,dc=huntfamily,dc=local' WHERE objectCategory='group'"  
Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst
Do Until objRecordSet.EOF
    Wscript.Echo objRecordSet.Fields("Name").Value  '   & "," & _
    Wscript.Echo objRecordSet.Fields("description").Value
    Wscript.Echo objRecordSet.Fields("distinguishedName").Value
Wscript.Echo objRecordSet.Fields("member").Value

    objRecordSet.MoveNext
Loop
我收到一个错误C:\Bin\SecurityGroupt.vbs(26,2)Microsoft VBScript运行时错误:类型不匹配

这是在线上的

Wscript.Echo objRecordSet.Fields("description").Value
使用Sysinternals中的Active Directory Explorer,我看到名为description的值,它表示它是一个DirectoryString。我尝试使用该值执行任何操作,将其视为字符串,都会出现此错误。我尝试将其转换为字符串,得到了相同的结果

一定是我遗漏了什么。有什么建议吗?

而不是

Wscript.Echo objRecordSet.Fields("Description").Value
试一试

!!!在最后一种情况下,不要忘记提前定义strDescription变量:

Dim strDescription

如果字段包含数组,则可以使用数组元素:

WScript.Echo Join(objRecordSet.Fields("description").Value, "")

已经很久了,但以防万一

请尝试以下方法:

On Error Resume Next

Do Until objRecordSet.EOF
    Wscript.Echo objRecordSet.Fields("Name").Value  '   & "," & _
    If Err.Number = 0 Then
        WScript.Echo "Value not defined"
        Err.Clear
    End If
    Wscript.Echo objRecordSet.Fields("description").Value
    If Err.Number = 0 Then
        WScript.Echo "Value not defined"
        Err.Clear
    End If
    Wscript.Echo objRecordSet.Fields("distinguishedName").Value
    If Err.Number = 0 Then
        WScript.Echo "Value not defined"
        Err.Clear
    End If
    Wscript.Echo objRecordSet.Fields("member").Value
    If Err.Number = 0 Then
        WScript.Echo "Value not defined"
        Err.Clear
    End If
    objRecordSet.MoveNext       
Loop

On Error Goto 0

有更简洁的方法可以做到这一点,但我是在内存中工作。

WScript.Echo TypeName(objRecordSet.Fields(“description”).Value)的输出是什么?我尝试了这个建议。结果是运行了Else代码,我得到了相同的错误。因此显然它不是空的。@Bernie尝试使用“IsEmpty”函数而不是“IsNull”函数。请遵循Ansgar的建议:“WScript.Echo TypeName(objRecordSet.Fields(“description”).Value)”
WScript.Echo Join(objRecordSet.Fields("description").Value, "")
On Error Resume Next

Do Until objRecordSet.EOF
    Wscript.Echo objRecordSet.Fields("Name").Value  '   & "," & _
    If Err.Number = 0 Then
        WScript.Echo "Value not defined"
        Err.Clear
    End If
    Wscript.Echo objRecordSet.Fields("description").Value
    If Err.Number = 0 Then
        WScript.Echo "Value not defined"
        Err.Clear
    End If
    Wscript.Echo objRecordSet.Fields("distinguishedName").Value
    If Err.Number = 0 Then
        WScript.Echo "Value not defined"
        Err.Clear
    End If
    Wscript.Echo objRecordSet.Fields("member").Value
    If Err.Number = 0 Then
        WScript.Echo "Value not defined"
        Err.Clear
    End If
    objRecordSet.MoveNext       
Loop

On Error Goto 0