C#principalContext仅更改某些用户的密码,而不是全部



我正在尝试更改系统中所有成员的广告密码,但是我的代码仅成功地更改了某些成员的密码。对于无法更改密码的成员,它显示以下错误:

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();
            }

相关内容

  • 没有找到相关文章

最新更新