使用JavaScript获取LDAP多值字符串属性
我试图在Active Directory中检索一个似乎是多值字符串的对象属性(请参见canonicalName)。执行搜索后:使用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
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