我正在尝试更改系统中所有成员的AD密码,但我的代码只是成功更改了某些成员的密码。对于无法更改密码的成员,它会显示以下错误:
System.NullReferenceException:未将对象引用设置为对象的实例。 at changep1.changep2.changeUserPassword(String _userID,String _oldPassword,String _newPassword)在C:\ Users \ Intern \ source \ repos \ changep1 \ changep1 \ changep2.aspx.cs:第52行
这是我的c#代码:
public string changeUserPassword(string _userID, string _oldPassword, string _newPassword)
{
string message="";
try
{
PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Domain, "extra.sales-comm.local", "DC=sales-comm,DC=local",
ContextOptions.SimpleBind, @"admin", "Passw@rd");
UserPrincipal oUserPrincipal = UserPrincipal.FindByIdentity(oPrincipalContext, _userID);
oUserPrincipal.ChangePassword(_oldPassword, _newPassword);
oUserPrincipal.Save();
}
catch (Exception e)
{
message = e.ToString();
}
return message;
}
我不明白为什么我的代码不会更改所有AD成员的密码。请帮助谢谢。
答案 0 :(得分:0)
如果找不到传递的user-id,您的代码需要在查找身份时检查UserPrincipal值是否为null。您在代码中未检查相同内容。这看起来就是它给出空指针异常的原因。
阅读方法UserPrincipal.FindByIdentity Method (PrincipalContext, String)的文档:
返回与指定标识匹配的用户主体对象 值。
<强>参数强>
context类型:System.DirectoryServices.AccountManagement.PrincipalContext
PrincipalContext,指定针对哪个服务器或域 执行操作。
identityValue类型:System.String
用户主体的身份。 此参数可以是IdentityType中包含的任何格式 枚举。
... // IdentityType枚举成员列在下面:
会员姓名-----------------------说明
DistinguishedName --------------身份是一个 专有名称(DN)。
Guid ----------------------身份是全球唯一标识符(GUID)。
名称----------------身份是一个名称。
SamAccountName ---------------身份是安全帐户管理员(SAM)名称。
Sid -------------身份是安全性中的安全标识符(SID) 描述符定义语言(SDDL)格式。
UserPrincipalName标识是用户主体名称(UPN)。
如下所示:
try
{
PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Domain, "extra.sales-comm.local", "DC=sales-comm,DC=local", ContextOptions.SimpleBind, @"admin", "Passw@rd");
UserPrincipal oUserPrincipal = UserPrincipal.FindByIdentity(oPrincipalContext, _userID);
if ( null != oUserPrincipal){
oUserPrincipal.ChangePassword(_oldPassword, _newPassword);
oUserPrincipal.Save();
}
else {
// return the message that the user-id could not be found.
// preferably passed argumnet in user-id should be **SamAccountName**
// please make sure that the user-id corresponds to the members mentioned above
}
}
catch (Exception e)
{
message = e.ToString();
}