使用JavaScript获取LDAP多值字符串属性

使用JavaScript获取LDAP多值字符串属性,javascript,active-directory,activex,ldap,Javascript,Active Directory,Activex,Ldap,我试图在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,nETBIOS

我试图在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;
然后,我尝试获取canonicalName:

var cn = records.Fields('canonicalName').Value;
问题是JavaScript不能将cn作为字符串或数组进行勇敢的描述。。。如果您查看canonicalName的AD模式,您可以看到它配置为'isSingleValue=false',我认为这是导致问题的原因

使用VisualStudio单步执行代码时,我可以钻取字符串值,QuickWatch显示cn.value(0)作为返回字符串值。但是当我把它打出来的时候,它就不起作用了

我尝试了通常的方法来获得价值,但没有运气:

for (var i in cn) { alert(cn[i]); }

(i=0;i 两者都不起作用


如何读取此对象的值?

有时我会遇到相同的问题:我无法使用javascript迭代对象,但在vb中,它是通过一个简单的for each

我找到了一种用javascript迭代的方法,解决了我的问题。我希望它对您有用:

var enumCn = new Enumerator(cn);
for (; !enumCn.atEnd(); enumCn.moveNext()) {
    var cnItem = enumCn.item();

... do whatever you need with cnItem...

    };
};

我知道这是一个比较老的问题,但我已经解决了,我想和大家分享一下

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]);
    }
var ldap=GetObject(“ldap://cn=Group-Name,ou=Name,dc=Domain”);
var ldapArr=ldap.member.toArray();
对于(var x=0;x

希望这能对你和其他人有所帮助,就像我一样。

我使用ADO记录集来解决这个问题,我想我会帮助未来的用户解决这个问题。它使用Xiazer的解决方案

我正在使用Internet Explorer 11和本地主机ApacheDS 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
$(文档).ready(函数(){
控制台日志(“启动”);
showUsers();
控制台日志(“完成”)
});
函数GetFieldValue(objField){
var结果=”;
if(objField.Value==null){
}
否则{
if(objField.type==12){
var ldapArr=objField.Value.toArray();
结果=ldapArr[0];
}
否则{
结果=objField.Value;
}
}
返回结果;
}//GetFieldValue
函数showUsers(){
console.log(“showUsers”);
var strAttributes、strFilter、SrchCriteria、strQuery;
strAttributes=“cn、sn、entryDN”
SrchCriteria=“(objectClass=iNetOrgPerson)”
var ADOCommand=newActiveXObject(“ADODB.Command”);
var ADOConnection=newActiveXObject(“ADODB.Connection”);
var ADORecordSet=新的ActiveXObject(“ADODB.RecordSet”);
ADOConnection.Provider=“ADsDSOObject”;
ADOConnection.Properties(“用户ID”)=“uid=admin,ou=system”
ADOConnection.Properties(“密码”)=“机密”
strDomainName=“localhost:10389/dc=mijnlap,dc=local”
strBase=“”;
ADOConnection.Open(“Active Directory提供程序”);
ADOCommand.ActiveConnection=ADOConnection;
strFilter=SrchCriteria;
strQuery=strBase+“;“+strFilter+”;“+strAttributes+”子树”;
strQuery=strQuery;
console.log(strQuery);
ADOCommand.CommandText=strQuery;
ADORecordSet=ADOCommand.Execute;
console.log(“执行查询”);
如果(ADORecordSet.RecordCount>0){
ADORecordSet.MoveFirst;
而(!ADORecordSet.EOF){
console.log(GetFieldValue(ADORecordSet.Fields(“sn”));
console.log(GetFieldValue(ADORecordSet.Fields(“cn”));
console.log(GetFieldValue(ADORecordSet.Fields(“entryDN”));
ADORecordSet.MoveNext;
}
}//如果
ADORecordSet.close
}//showUsers

更令人沮丧的是,我可以使用VBScript处理此问题,而不存在任何问题……但我没有真正获得赏金系统。。。为什么我要用我的名誉点数来得到答案?毕竟,这是我的名声…对我有用!很好的解决方案。
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]);
    }
$(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