在本地计算机上启用或禁用用户

时间:2012-07-17 12:22:00

标签: c#

要在本地计算机上启用或禁用用户,我使用以下代码段。

DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName);
DirectoryEntry currentUser = localMachine.Children.Find(user, "Administrators");
currentUser.Invoke("AccountDisabled", new object[] { true });
currentUser.CommitChanges();

我将用户指定为字符串。我收到“找不到文件路径错误”:Comexception未处理。

我的代码有什么问题吗?

4 个答案:

答案 0 :(得分:4)

如果您使用的是.NET 3.5及更高版本,则应查看System.DirectoryServices.AccountManagement(S.DS.AM)命名空间。在这里阅读所有相关内容:

基本上,您可以定义机器级上下文并轻松在AD中查找用户和/或组:

// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Machine);

// find a user
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName");

if(user != null)
{
   user.Enabled = false;
   user.Save();
}

新的S.DS.AM让您可以轻松地与AD中的用户和群组一起玩!

答案 1 :(得分:2)

根据DirectoryEntry的{​​{3}}:

  

连接到计算机上的用户。例如,WinNT://<domain name>/<computer name>/<user name>。如果您要连接到本地计算机,WinNT://<computer name>/<user name>

所以,你抓住用户的代码应该是:

DirectoryEntry currentUser = new DirectoryEntry("WinNT://" + Environment.MachineName + "/" + user);

答案 2 :(得分:1)

像这样使用

        DirectoryEntry local = new DirectoryEntry("WinNT://localhost");
        DirectoryEntry user = local.Children.Find(username);
        user.InvokeSet("AccountDisabled", true);
        user.CommitChanges();

答案 3 :(得分:0)

尝试使用统一命名约定,即使用&#34; \\&#34;像这样:

DirectoryEntry localMachine = new DirectoryEntry("WinNT:\\" + Environment.MachineName);