我需要针对域验证用户名,并且该代码可以正常工作。我面临的挑战是,当系统不是域的一部分(在工作组中)时,找不到用户。 (但系统已连接到域,因为我正在ping它,而不是它的一部分)
有人可以帮我一点吗?我想在系统仍在工作组中时验证域上的用户。
Ping domainserver = new Ping();
PingReply reply = domainserver.Send("ipadress domain server");
if (reply.Status == IPStatus.Success)
{
using (var domianContext = new PrincipalContext(ContextType.Domain, "domain"))
using (var foundUser = UserPrincipal.FindByIdentity(domianContext, IdentityType.SamAccountName, "username"))
if (foundUser == null)
{
MessageBox.Show("Username is not found on the domain");
}
else
{
MessageBox.Show("Username is found on the domain");
}
}
else
{
MessageBox.Show("It seems there is no network connection, please connect to the network first.");
}
答案 0 :(得分:0)
最好使用从Principal类抛出的异常,而不是使用ifs。
例如,如果您不是域的一部分,new PrincipalContext
将失败。
try
{
pc = new PrincipalContext(ContextType.Domain);
}
catch (PrincipalServerDownException ex)
{
//Domain is not accesible.
}
根据您要实现的实际情况,您还可以查看Environment.UserDomainName
变量
答案 1 :(得分:0)
感谢您的回复,我找到了解决方案。当您在域上运行脚本时,您使用域凭据执行此操作,这就是它工作的原因。当您仍在工作组(在我的情况下)时,使用的帐户没有足够的权限来查看域中是否存在用户名。这就是为什么它不起作用。