我正在尝试在Active Directory中检索一个似乎是多值字符串的对象属性(请参阅canonicalName)。执行搜索后:
var conn;
conn.Open = 'Provider=ADsDSOObject;';
var command = '<LDAP://CN=Partitions,CN=Configuration,DC=domain,DC=com>;(&(objectcategory=crossRef)(systemFlags=3));name,nETBIOSName,nCName,canonicalName;onelevel';
var ado = new ActiveXObject('ADODB.Command');
ado.ActiveConnection = conn;
ado.CommandText = command;
var records = ado.Execute;
并循环记录集:
while (!records.Eof){
...
records.MoveNext();
}
然后我尝试获取canonicalName:
var cn = records.Fields('canonicalName').Value;
问题是JavaScript没有将cn表示为字符串或数组...如果你查看canonicalName的AD模式,你可以看到它配置了'isSingleValue = false'这是我认为的导致问题...
当使用Visual Studio单步执行代码时,我可以深入查看字符串值,QuickWatch显示cn.value(0)作为返回字符串值。但是当我输入它时它不起作用......
我尝试了通常的方法来获得没有运气的价值:
for (var i in cn) { alert(cn[i]); }
和
for (i = 0; i < cn.length; i++) { alert(cn[i]); }
两者都不起作用......
如何读取此对象的值?
答案 0 :(得分:2)
我知道这是一个较老的问题,但我想出来并希望分享。
var ldap = GetObject("LDAP://cn=Group Name, ou=Name, dc=Domain");
var ldapArr = ldap.member.toArray();
for(var x = 0; x < ldapArr.length; x++) {
WScript.Echo(ldapArr [x]);
}
希望这对你和其他任何人都有帮助,就像我一直对它一样。
答案 1 :(得分:1)
有时候我遇到了同样的问题:我不能用javascript迭代一个对象,但是在vb中,每个都用一个简单的方法完成...
我找到了一种在javascript中迭代解决问题的方法。我希望它对你有用:
var enumCn = new Enumerator(cn);
for (; !enumCn.atEnd(); enumCn.moveNext()) {
var cnItem = enumCn.item();
... do whatever you need with cnItem...
};
};
答案 2 :(得分:0)
我正在使用ADO Recordset,并且认为我会帮助未来的用户经过这个问题。它利用了夏泽的解决方案。
我正在使用Internet Explorer 11和本地主机Apache DS Explorer LDAP服务器。当然是JQuery。
将其放入任何HTML文件并在Internet Explorer中打开。
$(document).ready(function(){
console.log("Starting");
showUsers();
console.log("Done")
});
function GetFieldValue(objField){
var result = "";
if (objField.Value == null){
}
else{
if (objField.type == 12){
var ldapArr = objField.Value.toArray();
result = ldapArr[0];
}
else{
result = objField.Value;
}
}
return result;
}//GetFieldValue
function showUsers(){
console.log("showUsers");
var strAttributes, strFilter, SrchCriteria, strQuery;
strAttributes = "cn,sn,entryDN"
SrchCriteria="(objectClass=iNetOrgPerson)"
var ADOCommand = new ActiveXObject("ADODB.Command");
var ADOConnection = new ActiveXObject("ADODB.Connection");
var ADORecordSet = new ActiveXObject("ADODB.RecordSet");
ADOConnection.Provider = "ADsDSOObject";
ADOConnection.Properties("User ID") = "uid=admin,ou=system"
ADOConnection.Properties("Password") = "secret"
strDomainName = "localhost:10389/dc=mijnldap,dc=local"
strBase = "<LDAP://" + strDomainName + ">";
ADOConnection.Open("Active Directory Provider");
ADOCommand.ActiveConnection = ADOConnection;
strFilter = SrchCriteria;
strQuery = strBase + ";" + strFilter + ";" + strAttributes + ";subtree";
strQuery = strQuery;
console.log(strQuery);
ADOCommand.CommandText = strQuery;
ADORecordSet = ADOCommand.Execute;
console.log("Query executed");
if (ADORecordSet.RecordCount > 0) {
ADORecordSet.MoveFirst;
while (! ADORecordSet.EOF){
console.log (GetFieldValue(ADORecordSet.Fields("sn")));
console.log (GetFieldValue(ADORecordSet.Fields("cn")));
console.log (GetFieldValue(ADORecordSet.Fields("entryDN")));
ADORecordSet.MoveNext;
}
}//if
ADORecordSet.close
} //showUsers