C# 我(想)我想使用位运算符来检查useraccountcontrol属性!
下面是一些代码:C# 我(想)我想使用位运算符来检查useraccountcontrol属性!,c#,ldap,bitwise-operators,C#,Ldap,Bitwise Operators,下面是一些代码: DirectorySearcher searcher = new DirectorySearcher(); searcher.Filter = "(&(objectClass=user)(sAMAccountName=" + lstUsers.SelectedItem.Text + "))"; SearchResult result = searcher.FindOne(); 在result.Properties内[“
DirectorySearcher searcher = new DirectorySearcher();
searcher.Filter = "(&(objectClass=user)(sAMAccountName=" + lstUsers.SelectedItem.Text + "))";
SearchResult result = searcher.FindOne();
在result.Properties内[“useraccountcontrol”]将是一个根据帐户状态为我提供值的项。例如,值66050表示我正在处理:
正常账户;密码未过期时;它已被禁用。
找出我的值是否“包含”AccountDisable标志(即2)的最简洁方法是什么
提前谢谢 enum AccountFlags
enum AccountFlags
{
Script = (1<<0),
AccountDisable = (1<<1),
// etc...
}
if( ((int)result.Properties["useraccountcontrol"]) & AccountFlags.AccountDisable > 0 )
{
// Account is Disabled...
}
{
脚本=(1)
从这里的当前代码库翻译过来,它应该可以工作…这里一般都很好()
基本上,您需要使用和运算符检查号码:
if( ( result & ACCOUNTDISABLE ) == ACCOUNTDISABLE )
{ .... }
您可以将ACCOUNTDISABLE
定义为常量(就像在链接的表中一样)。也可以为值创建枚举。请确保分配正确的数字并设置一个值。
选择什么取决于需要多少值。当只处理ACCOUNTDISABLE而不处理其他内容时,可以使用define或const
UserAccountControlFlags userAccFlags = (UserAccountControlFlags) 66050;
// Much more readable
if(userAccFlags.Has(UserAccountControlFlags.AccountDisabled))
{
// Do your stuff here
}
下面是扩展方法:
public static bool Has<T>(this System.Enum type, T value) where T : struct
{
return ((int)(object)type & (int)(object)value) > 0;
}
根据需要,您可以使用ActiveDirectory按启用/禁用状态筛选帐户:
searcher.Filter = "(&(objectClass=user)(UserAccountControl:1.2.840.113556.1.4.803:=2))";
或:
相关文章:
还有另一篇文章:到目前为止,所有答案都很好,但谢谢Frank-我认为你是第一个在查询级别使用+1位运算符。这不是问题的确切答案,但最常用的是:D
[Flags]
public enum UserAccountControlFlags
{
Script = 0x1,
AccountDisabled = 0x2,
HomeDirectoryRequired = 0x8,
AccountLockedOut = 0x10,
PasswordNotRequired = 0x20,
PasswordCannotChange = 0x40,
EncryptedTextPasswordAllowed = 0x80,
TempDuplicateAccount = 0x100,
NormalAccount = 0x200,
InterDomainTrustAccount = 0x800,
WorkstationTrustAccount = 0x1000,
ServerTrustAccount = 0x2000,
PasswordDoesNotExpire = 0x10000,
MnsLogonAccount = 0x20000,
SmartCardRequired = 0x40000,
TrustedForDelegation = 0x80000,
AccountNotDelegated = 0x100000,
UseDesKeyOnly = 0x200000,
DontRequirePreauth = 0x400000,
PasswordExpired = 0x800000,
TrustedToAuthenticateForDelegation = 0x1000000,
NoAuthDataRequired = 0x2000000
}
searcher.Filter = "(&(objectClass=user)(UserAccountControl:1.2.840.113556.1.4.803:=2))";
searcher.Filter = "(&(objectClass=user)(!(UserAccountControl:1.2.840.113556.1.4.803:=2)))";