访问Active Directory时发生VBScript错误
好吧,我投降。我正在编写Active Directory中的一些数据脚本,但我遇到了一个无法解决的错误。我的剧本是访问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
'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