Можно воспользоваться ADO
X++:
static void GetUserList(Args _args)
{
Com oConnect = new Com("ADODB.Connection");
Com property;
Com Properties;
Com rs;
Com Fields;
Com Field;
ComVariant var;
Array array;
str s;
int i;
boolean f;
str address;
#define.UF_ACCOUNTDISABLE(0x02)
;
oConnect.Provider("ADsDSOObject");
Properties = oConnect.Properties();
/*
property = Properties.Item("User ID");
property.Value("пользователь");
property = Properties.Item("Password");
property.Value("пароль");*/
// Если для доступа надо подключаться под другим пользователем, то раскомментировать и указать правильный аккаунт
property = Properties.Item("Encrypt Password");
property.Value(True);
oConnect.Open("DS Query");
// OU добавляются вначале запроса LDAP <LDAP://OU=Организация,DC=Axapta,DC=ru>
rs = oConnect.Execute(ComVariant::createFromStr( "<LDAP://DC=Axapta,DC=ru>;(&((objectClass=user)(objectCategory=person)));" +
"userAccountControl,userPrincipalName,Name,proxyAddresses,sAMAccountName,Mail;subTree")); //;onelevel
SetPrefix("Пользователи домена");
While (!rs.EOF())
{
Fields = rs.Fields();
Field = Fields.Item("userAccountControl");
var = Field.Value();
if ((var.int() & #UF_ACCOUNTDISABLE) == 0) // Только активные пользователи
{
Field = Fields.Item("sAMAccountName"); // имя аккаунта
var = Field.Value();
s = var.bStr();
Field = Fields.Item("userPrincipalName"); // имя в формате имя@домен
var = Field.Value();
s += ";" + var.bStr();
Field = Fields.Item("Name"); // полное имя
var = Field.Value();
s += ";" + var.bStr();
Field = Fields.Item("proxyAddresses"); // почтовый адрес на сервере Exchange
var = Field.Value();
address = "";
if (var.variantType() != ComVariantType::VT_NULL)
{
array = var.safeArray();
for (i=1;i<=array.lastIndex();i++)
{
var = array.value(i);
if (var.variantType() == ComVariantType::VT_BSTR)
{
if (match("<SMTP", var.bStr()))
address += (address ? "," : "") + substr(var.bStr(), strLen("SMTP:")+1, strLen(var.bStr()));
}
}
if (address)
s += ";" + address;
else
{
Field = Fields.Item("Mail"); // поле адреса в данных пользователя
var = Field.Value();
s += ";" + var.bStr();
}
}
info(s);
}
rs.MoveNext();
}
}