私は、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) は、関連するトピックです。タイトルのコンピューター アカウントの無効化ですが、コメントとコードはすべて、これがユーザー アカウントの無効化に適用されることを示唆しているようです。
どんな洞察もいただければ幸いです:)