13

C#/。NETを使用して、ActiveDirectoryでコンピューターアカウントが無効になっているかどうかを確認するにはどうすればよいですか。

4

8 に答える 8

26

これを試して:

class Program
{
    static void Main(string[] args)
    {
        const string ldap = "LDAP://your-ldap-server-here";

        using (DirectoryEntry conn = new DirectoryEntry(ldap))
        {
            using (DirectorySearcher searcher = new DirectorySearcher(conn))
            {
                searcher.Filter = "(|(samAccountName=userA)(samAccountName=userB))";
                searcher.PropertiesToLoad.Add("samAccountName");
                searcher.PropertiesToLoad.Add("userAccountControl");

                using (SearchResultCollection results = searcher.FindAll())
                {
                    foreach (SearchResult result in results)
                    {
                        int userAccountControl = Convert.ToInt32(result.Properties["userAccountControl"][0]);
                        string samAccountName = Convert.ToString(result.Properties["samAccountName"][0]);
                        bool disabled = ((userAccountControl & 2) > 0);

                        Console.WriteLine("{0} ({1:x}) :: {2}", samAccountName, userAccountControl, disabled);
                    }
                }
            }
        }

        Console.ReadLine();
    }
}

userAccountControlアカウントが無効になっている場合、の 2 番目のビットは1 になります。

于 2009-02-26T18:16:43.927 に答える
7

このエントリを試してください:

http://www.codeproject.com/KB/system/everythingInAD.aspx#42

ユーザーアカウント制御フラグを調べる必要があります。

于 2009-02-26T17:59:58.180 に答える
6

.NET 3.5を使用している場合は、新しいSystem.DirectoryServices.AccountManagment名前空間メソッドを使用して、ActiveDirectoryにはるかに簡単にアクセスできます。UserPrincipalオブジェクトには、探しているものを提供するEnabledプロパティがあります。

これらのルーチンの概要は、2008年1月のMSDNMagazineにあります。ここでオンラインの記事を読むことができます:.NETFramework3.5でのディレクトリセキュリティプリンシパルの管理

于 2009-05-02T21:18:18.923 に答える
4

Leandro López の答えはクールで機能します... もう 1 つのオプションは、disable の値を使用して userAccountControl の LINQ を実行し、それらの使用を無効にすることです。

userAccountControl からの返信は次のとおりです。

512有効なアカウント

514無効なアカウント

544有効、パスワード不要

546 無効、パスワード不要

66048 有効、パスワードの有効期限はありません

66050 無効、パスワードは無期限

66080 有効、パスワードは無期限で不要

66082 無効、パスワードは無期限で不要

262656 有効、スマートカードが必要

262658 無効、スマートカードが必要

262688 有効、スマートカードが必要、パスワードは不要

262690 無効、スマートカードが必要、パスワードは不要

328192 有効、スマートカードが必要、パスワードの有効期限なし

328194 無効、スマートカードが必要、パスワードの有効期限はありません

328224 有効、スマートカードが必要、パスワードは無期限で不要

328226 無効、スマートカードが必要、パスワードは無期限で不要

于 2010-12-13T12:26:36.247 に答える
3

ビットをチェックせずに、次を追加します。

(userAccountControl:1.2.840.113556.1.4.803:=2)

フィルターに無効なユーザーのみを返す必要があります。もちろん、

(!userAccountControl:1.2.840.113556.1.4.803:=2)

そのルートに進みたい場合は、ユーザーが無効にならないようにします。

于 2009-03-05T14:51:12.083 に答える
2

やっと手に入れました:)これが私のコードです。

const int ADS_UF_ACCOUNTDISABLE = 0x00000002;

        DirectoryEntry de = new DirectoryEntry();
        de.Path = "LDAP://companyname.com";
        DirectorySearcher objADSearcher = new DirectorySearcher(de);
        de.AuthenticationType = AuthenticationTypes.Secure;

        objADSearcher.SearchRoot = de;
        objADSearcher.Filter = "(SAMAccountName=" + TextBox1.Text + ")";
        SearchResult results = objADSearcher.FindOne();
        if (results.ToString() !="")
        {

           int flags= Convert.ToInt32(results.Properties["userAccountControl"][0].ToString());

//参照結果用.Properties["userAccountControl"][0].ToString().Equals("514");

           if (Convert.ToBoolean(flags & ADS_UF_ACCOUNTDISABLE))
           {
               Response.Write("Account Disabled");
           }
于 2011-03-17T21:13:20.430 に答える
0

samAcountName またはその他の Identity フィールドを使用している場合は、UserPrincipal.FindByIdentity メソッドを使用する方が簡単です。そして、Leandro López と Deepti へのハイブリッド アプローチを使用します。両方のアプローチは非常に優れています..しかし、非常に狭い範囲に焦点を当てています. このフラグの詳細については、MSDNを参照してください。

于 2011-03-31T17:39:40.963 に答える