2

特定のユーザーが Windows 広告で非アクティブ化されたユーザーであるかどうかを知る方法を投稿できますか?

4

3 に答える 3

3

.NET 3.5 を使用している場合、または .NET 3.5 にアップグレードできる場合はSystem.DirectoryServices.AccountManagement、これらの操作の多くを簡単にする新しい名前空間を確認してください。概要については、「. NET Framework 3.5 でのディレクトリ セキュリティ プリンシパルの管理」を参照してください。

あなたの場合、次のようなコードを書くことができます:

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN")

UserPrincipal user = UserPrincipal.FindByIdentity("somename");

bool locked = user.IsAccountLockedOut();

それだけです!ユーザーとグループに対するこれらの日常的な操作のほとんどは、.NET 3.5 で大幅に改善されました。これらの新しい機能を使用してください。

于 2010-06-14T16:08:26.327 に答える
2

AD操作方法の良いリンクは次のとおりです:(ほぼ)C#を介したActive Directoryのすべて

userAccountControl プロパティを照会する必要があります。これはビット単位のフラグであり、無効なアカウントの場合は 514 だと思いますが、値は累積されるため、解決する必要があります。(NORMAL ACCOUNT + ACCOUNT DISABLED = 512 + 2 = 514).

すべてのユーザー アカウント制御フラグのリファレンスは次のとおりです。

于 2010-06-14T13:12:23.183 に答える
2

プロパティをクエリする必要がありuserAccountControlます。

userAccountControlフラグの値は次のとおりです。

    CONST   HEX
    -------------------------------
    SCRIPT 0x0001
    ACCOUNTDISABLE 0x0002
    HOMEDIR_REQUIRED 0x0008
    LOCKOUT 0x0010
    PASSWD_NOTREQD 0x0020
    PASSWD_CANT_CHANGE 0x0040
    ENCRYPTED_TEXT_PWD_ALLOWED 0x0080
    TEMP_DUPLICATE_ACCOUNT 0x0100
    NORMAL_ACCOUNT 0x0200
    INTERDOMAIN_TRUST_ACCOUNT 0x0800
    WORKSTATION_TRUST_ACCOUNT 0x1000
    SERVER_TRUST_ACCOUNT 0x2000
    DONT_EXPIRE_PASSWORD 0x10000
    MNS_LOGON_ACCOUNT 0x20000
    SMARTCARD_REQUIRED 0x40000
    TRUSTED_FOR_DELEGATION 0x80000
    NOT_DELEGATED 0x100000
    USE_DES_KEY_ONLY 0x200000
    DONT_REQ_PREAUTH 0x400000
    PASSWORD_EXPIRED 0x800000
    TRUSTED_TO_AUTH_FOR_DELEGATION 0x1000000

System.DirectoryServices名前空間を操作し、DirectorySearcherクラスを使用して Active Directory をクエリし、userAccountControlフラグ プロパティを確認する必要があります。

参照する必要があると思われる良いページは次のとおりです。

C# で Active Directory の (ほぼ) すべてを行う方法

userAccountControl次のように flags プロパティと比較する場合は、ビット単位で行う必要があります。

using (DirectorySearcher searcher = new DirectorySearcher()) {
    searcher.SearchRoot = new DirectoryEntry(rootDSE); // Where rootDSE is a string which contains your LDAP path to your domain.
    searcher.SearchScope = SearchScope.Subtree;
    searcher.Filter = string.Format("(&(objectClass=user)(sAMAccountName={0}))", userName);

    SearchResult result = null;

    try {
        result = searcher.FindOne();
    } catch (Exception) {
        // You know what to do here... =P
    }

    if (result == null)
        return;

    DirectoryEntry user = result.GetDirectoryEntry();

    bool isAccountDisabled = ((user.Properties("userAccountControl").Value & ACCOUNTDISABLE) == ACCOUNTDISABLE);
}

これはとにかく役に立ちましたか?

于 2010-06-14T13:09:57.140 に答える