我正在尝试更改系统中所有成员的广告密码,但是我的代码仅成功地更改了某些成员的密码。对于无法更改密码的成员,它显示以下错误:
system.nullReferenceException:对象引用未设置为对象的实例。在cangep1.changep2.changeuserpassword(字符串_userid,string _oldpassword,string _newpassword(中:
这是我的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;
}
我不明白为什么我的代码不会更改所有广告成员的密码。请帮助谢谢。
您的代码需要检查在找到身份时的用户主体值是否为null,以防是否找到传递的用户ID。您在代码中没有检查相同的内容。这看起来像是给出无效指针例外的原因。
阅读方法userprincipal.findbyidentity方法(principalContext,string(的文档:
返回与指定身份匹配的用户主对象值。
参数
上下文类型:system.directoryservices.accountmanagement.principalcontext
principtalContext指定服务器或域进行操作。
IdentityValue类型:System.String
用户本金的身份。此参数可以是IdentityType中包含的任何格式枚举。
...//IdentityType枚举成员如下:
成员名称---------------------------------------------------------------------------------------------------------------
DickecondedName -------------------------------------------------------------杰出名称(DN(。
GUID ---------------------------身份是全球唯一标识符(GUID(。
名称---------------------------------------------------------------------------------------------------------
samaccountname ------------------身份是安全客户经理(SAM(名称。
SID -------------------身份是安全性标识符(SID(描述符定义语言(SDDL(格式。
用户principalname身份是用户主名(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();
}