要在本地计算机上启用或禁用用户,我使用以下代码段。
DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName);
DirectoryEntry currentUser = localMachine.Children.Find(user, "Administrators");
currentUser.Invoke("AccountDisabled", new object[] { true });
currentUser.CommitChanges();
我将用户指定为字符串。我收到“找不到文件路径错误”:Comexception未处理。
我的代码有什么问题吗?
答案 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);