Цитата:
Сообщение от
Poleax
Кто нибудь пробовал переносить класс AxaptaUserManager с аксапты 4.0 в 3.0?
Если Вас не смущает использование .NET в Ax 3.0 (подробности
тут), то все очень просто. Вот пример, который выведет Вам всех пользователей в AD, причем можно по параметром отсекать тех, которые Вам не нужны(отключенных или например из определенной папки).
Код:
using System;
using System.DirectoryServices;
namespace testAD
{
class Program
{
static void Main(string[] args)
{
String ldapPath = @"LDAP://bla-bla-bla";
DirectoryEntry root = new DirectoryEntry(ldapPath);
PrintUsers(root);
}
[Flags]
public enum AdsUserFlags
{
Script = 1, // 0x1
AccountDisabled = 2, // 0x2
HomeDirectoryRequired = 8, // 0x8
AccountLockedOut = 16, // 0x10
PasswordNotRequired = 32, // 0x20
PasswordCannotChange = 64, // 0x40
EncryptedTextPasswordAllowed = 128, // 0x80
TempDuplicateAccount = 256, // 0x100
NormalAccount = 512, // 0x200
InterDomainTrustAccount = 2048, // 0x800
WorkstationTrustAccount = 4096, // 0x1000
ServerTrustAccount = 8192, // 0x2000
PasswordDoesNotExpire = 65536, // 0x10000
MnsLogonAccount = 131072, // 0x20000
SmartCardRequired = 262144, // 0x40000
TrustedForDelegation = 524288, // 0x80000
AccountNotDelegated = 1048576, // 0x100000
UseDesKeyOnly = 2097152, // 0x200000
DontRequirePreauth = 4194304, // 0x400000
PasswordExpired = 8388608, // 0x800000
TrustedToAuthenticateForDelegation = 16777216, // 0x1000000
NoAuthDataRequired = 33554432 // 0x2000000
}
private static void PrintUsers(DirectoryEntry de)
{
foreach (DirectoryEntry elem in de.Children)
{
if (string.Compare(elem.SchemaClassName, "user") != 0)
PrintUsers(elem);
else
{
AdsUserFlags userFlags = (AdsUserFlags)elem.Properties["userAccountControl"].Value;
//На случай если поле null
try
{
Console.WriteLine("User: {0}", elem.Properties["displayName"].Value.ToString());
}
catch
{
Console.WriteLine("User:");
}
Console.WriteLine("Path: {0}", elem.Path);
Console.WriteLine("Parameters: {0}", userFlags);
}
}
}
}
}