4

私は、IT オフィスの何人かの学生従業員に配布できる、簡単で汚い C# .exe を作成しようとしています。.exe は、それが実行されているマシンの名前を検出し、Active Directory でその名前を検索して、コンピューター エントリを無効にできる必要があります。これまでのところ、名前の検出や検索で問題が発生したことはありませんが、Active Directory に直接アクセスしてコンピューター エントリが無効になっていないことを確認すると、少しの削除コードによって誤検知が発生します。

    private void confirmRemoveButton_Click(object sender, EventArgs e)
    {
        string computerName = Environment.MachineName;
        using (PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, null, "useraccount", "password"))
        {
            ComputerPrincipal computer = ComputerPrincipal.FindByIdentity(domainContext, computerName);

            if (computer != null)
            {
                try
                {
                    computer.Enabled = false;
                    label3.Visible = true;
                    label3.Text = "Computer was disabled in Active Directory.";
                    button1.Visible = true;
                }

                catch (Exception x)
                {
                    label3.Visible = true;
                    label3.Text = "Unable to disable computer with exception " + x;
                    button1.Visible = true;
                }
            }

            else if (computer == null)
            {
                label3.Visible = true;
                label3.Text = "Computer was not found in Active Directory.";
                button1.Visible = true;
            }

            else
            {
                label3.Visible = true;
                label3.Text = "Unexpected error in computer search.";
                button1.Visible = true;
            }
        }
    }

これは私が今持っているコードです。上記のコードは、検出されたコンピューター名に対してコンピューター名をチェックし、実際にコンピューター アカウントを無効にすることをユーザーに確認させるものです。これをクリックして確認すると (現在、誤解を招くように削除確認ボタンとラベル付けされています)、このコードを実行して成功または失敗を報告する必要があります。ただし、テストでは成功と報告されますが、コンピューター オブジェクトが無効になっていないことがわかります。

このリンク (http://stackoverflow.com/questions/591681/using-c-how-do-you-check-if-a-computer-account-is-disabled-in-active-directory) は、関連するトピックです。タイトルのコンピューター アカウントの無効化ですが、コメントとコードはすべて、これがユーザー アカウントの無効化に適用されることを示唆しているようです。

どんな洞察もいただければ幸いです:)

4

2 に答える 2

4

オブジェクトを呼び出す必要がありSaveます。ComputerPrincipal

http://msdn.microsoft.com/en-us/library/bb354074.aspx

于 2012-09-26T21:30:35.453 に答える
3

PrincipalComputer オブジェクトを保存する必要があります。そうでなければ、あなたのコードは問題ありません。これは、コンピューターが存在しない場合は何も返さない単純なコンソール アプリ バージョンです。

    static void Main(string[] args)
    {
        Console.WriteLine("Enter the name of the computer you wish to disable");
        string ComputerName = Console.ReadLine();
        if (ComputerName != "" && ComputerName != null)
        {
            using (PrincipalContext TargetDomain = new PrincipalContext(ContextType.Domain, null, "admin", "password"))
            {
                ComputerPrincipal TargetComputer = ComputerPrincipal.FindByIdentity(TargetDomain, ComputerName);

                if (TargetComputer != null)
                {
                    if ((bool)TargetComputer.Enabled)
                    {
                        Console.WriteLine("Computer is currently enabled, it will now be disabled");
                        TargetComputer.Enabled = false;
                        Console.WriteLine("Is computer now enabled? " + TargetComputer.Enabled);
                        TargetComputer.Save();
                    }
                    else
                    {
                        Console.WriteLine("Computer is currently disabled, it will now be enabled");
                        TargetComputer.Enabled = true;
                        Console.WriteLine("Is computer now enabled? " + TargetComputer.Enabled);
                        TargetComputer.Save();
                    }
                    Console.Read();
                }
            }
        }
    }

ダン、キーレンは私を打ち負かしました!

AD が何が起こったかを認識するまでに時間がかかる場合があることに注意してください。

于 2012-09-26T22:07:13.303 に答える