.net 修改AD域中的密码

1.通过vs 2013 新建一个web站点(不是空项目),这个会带一下模板,

2.然后新建一个页面UpdatePassWord.aspx

aspx页面内容:

<%@ Page Title="UpdatePassWord" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="UpdatePassWord.aspx.cs" Inherits="ADUpdatePwd.Account.UpdatePassWord" %>

<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
    <hgroup class="title">
        <h1><%: Title %>.</h1>
        <h2>更改AD域中用户密码。</h2>
    </hgroup>

    <div>
        <p class="message-info">
            密码必须至少包含 <%: Membership.MinRequiredPasswordLength %> 个字符。
        </p>

        <p class="validation-summary-errors">
            <asp:Literal runat="server" ID="ErrorMessage" />
        </p>

        <fieldset>
            <legend>修改密码</legend>
            <ol>
                <li>
                    <asp:Label runat="server" AssociatedControlID="txt_UserName">用户名</asp:Label>
                    <asp:TextBox runat="server" ID="txt_UserName" />@sharepoint.com.cn
                    <asp:RequiredFieldValidator runat="server" ControlToValidate="txt_UserName"
                        CssClass="field-validation-error" ErrorMessage="用户名字段是必填字段。" />
                </li>
                <li>
                    <asp:Label runat="server" AssociatedControlID="txt_Old_PassWord">旧密码</asp:Label>
                    <asp:TextBox runat="server" ID="txt_Old_PassWord" TextMode="Password" />
                    <asp:RequiredFieldValidator runat="server" ControlToValidate="txt_Old_PassWord"
                        CssClass="field-validation-error" ErrorMessage="旧密码字段是必填字段。" />
                </li>
                <li>
                    <asp:Label runat="server" AssociatedControlID="txt_New_Password">新密码</asp:Label>
                    <asp:TextBox runat="server" ID="txt_New_Password" TextMode="Password" />
                    <asp:RequiredFieldValidator runat="server" ControlToValidate="txt_New_Password"
                        CssClass="field-validation-error" ErrorMessage="密码字段是必填字段。" />
                </li>
                <li>
                    <asp:Label runat="server" AssociatedControlID="txt_New_ConfirmPassword">确认新密码</asp:Label>
                    <asp:TextBox runat="server" ID="txt_New_ConfirmPassword" TextMode="Password" />
                    <asp:RequiredFieldValidator runat="server" ControlToValidate="txt_New_ConfirmPassword"
                        CssClass="field-validation-error" Display="Dynamic" ErrorMessage="确认新密码字段是必填字段。" />
                    <asp:CompareValidator runat="server" ControlToCompare="txt_New_Password" ControlToValidate="txt_New_ConfirmPassword"
                        CssClass="field-validation-error" Display="Dynamic" ErrorMessage="新密码和确认新密码不匹配。" />
                </li>
            </ol>
            <asp:Button runat="server" ID="btn_Action_Update" CommandName="MoveNext" Text="修改" OnClick="btn_Action_Update_Click" />
        </fieldset>
    </div>
</asp:Content>

cs:代码:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.DirectoryServices;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ADUpdatePwd.Account
{
    public partial class UpdatePassWord : System.Web.UI.Page
    {
        static string _exception = "";
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        /// <summary>
        /// 修改密码
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btn_Action_Update_Click(object sender, EventArgs e)
        {
            string _filePath = "log_" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";//输出日志
            int _flog = 1;//记录标识,是否存在修改密码的账户 1:代表存在此用户 2:代表不存在此用户 3:代表程序出错 4:代表旧密码不正确 5:新密码和旧密码相同    

            _filePath = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + _filePath;
            CheckIsHaveFile(_filePath);

            WriteLogToTxt(_filePath, "----执行开始----");
            string _UserName = txt_UserName.Text.Trim();
            string _Old_PassWord = txt_Old_PassWord.Text.Trim();
            string _New_Password = txt_New_Password.Text.Trim();
            string _New_ConfirmPassword = txt_New_ConfirmPassword.Text.Trim();

            string DomainServer = ConfigurationManager.AppSettings["DomainServer_AD"].ToString();
            string ManagerName = ConfigurationManager.AppSettings["ManagerName_AD"].ToString();
            string ManagerPassword = ConfigurationManager.AppSettings["ManagerPassword_AD"].ToString();

            WriteLogToTxt(_filePath, "----域控服务器:----" + DomainServer);
            WriteLogToTxt(_filePath, "----管理员账户:----" + ManagerName);
            WriteLogToTxt(_filePath, "----管理员密码:----" + ManagerPassword);

            WriteLogToTxt(_filePath, "----被修改账户:----" + _UserName);
            WriteLogToTxt(_filePath, "----旧密码:----" + _Old_PassWord);
            WriteLogToTxt(_filePath, "----新密码:----" + _New_Password);

            if (_Old_PassWord != _New_Password)
            {
                if (CheckIs_Old_PassWord_IsCorrect(_UserName, _Old_PassWord))
                {
                    #region 密码修改部分
                    DirectoryEntry entry = new DirectoryEntry("LDAP://" + DomainServer, ManagerName, ManagerPassword, AuthenticationTypes.Secure);
                    List<string> directorys = new List<string>();
                    try
                    {
                        if (entry != null)
                        {
                            DirectorySearcher mySearcher = new DirectorySearcher(entry);
                            mySearcher.Filter = ("(&(objectClass=user)(sAMAccountName=" + _UserName + "))");
                            SearchResult searchResult = mySearcher.FindOne();
                            if (searchResult != null)
                            {
                                _flog = 1;
                                WriteLogToTxt(_filePath, "----是否存在:----域中存在此账户");
                                DirectoryEntry userEntry = searchResult.GetDirectoryEntry();
                                //userEntry.Invoke("ChangePassword", new object[] { _Old_PassWord, _New_ConfirmPassword });//调ChangePassword方法修改密码
                                userEntry.Invoke("SetPassword", new object[] { _New_ConfirmPassword });
                                entry.CommitChanges();//提交修改
                                WriteLogToTxt(_filePath, "----执行结果:----密码修改成功");
                            }
                            else
                            {
                                _flog = 0;
                                WriteLogToTxt(_filePath, "----是否存在:----域中不存在此账户");
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        WriteLogToTxt(_filePath, "----程序报错:----" + ex.Message);
                        ErrorMessage.Text = "程序报错:" + ex.Message;
                        _exception = ex.Message;
                        _flog = 3;
                    }
                    finally
                    {
                        if (entry != null)
                        {
                            //释放资源
                            entry.Close();
                            entry.Dispose();
                        }
                    }
                    #endregion
                }
                else
                    _flog = 4;
            }
            else
            {
                _flog = 5;
            }

            WriteLogToTxt(_filePath, "----执行结束----");

            if (_flog == 5)
            {
                ErrorMessage.Text = "温馨提示:旧密码和新密码不能相同!";
            }
            else if (_flog == 4)
            {
                ErrorMessage.Text = "程序报错:" + _exception;
            }
            else if (_flog == 0)
            {
                ErrorMessage.Text = "温馨提示:域中不存在此账户!";
            }
            else if (_flog == 1)
            {
                ErrorMessage.Text = "温馨提示:修改成功!";
            }
            else if (_flog == 3)
            {
                ErrorMessage.Text = "程序报错:" + _exception;
            }

        }

        /// <summary>
        /// 检查输入的用户和老密码是否正确
        /// </summary>
        /// <param name="userName"></param>
        /// <param name="passWord"></param>
        /// <returns></returns>
        public static bool CheckIs_Old_PassWord_IsCorrect(string userName, string passWord)
        {
            string _filePath = "log_" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";//输出日志
            int _temp = 0;
            _filePath = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + _filePath;
            string DomainServer = ConfigurationManager.AppSettings["DomainServer_AD"].ToString();
            string path = "LDAP://" + DomainServer;

            DirectoryEntry entry = new DirectoryEntry(path, userName, passWord, AuthenticationTypes.Secure);

            DirectorySearcher mySearcher = new DirectorySearcher(entry);

            mySearcher.Filter = ("(SAMAccountName=" + userName + ")");

            try
            {
                SearchResult searchResult = mySearcher.FindOne();

                if (searchResult != null)
                    _temp = 1;
            }
            catch (Exception ex)
            {
                WriteLogToTxt(_filePath, "----程序报错:----" + ex.Message);
                _exception = ex.Message;
                _temp = 0;
            }

            if (_temp == 1)
                return true;
            else
                return false;
        }

        /// <summary>
        /// 判断是否存在文件
        /// </summary>
        /// <param name="_filePath"></param>
        public static void CheckIsHaveFile(string _filePath)
        {
            if (!System.IO.File.Exists(_filePath))
            {
                System.IO.File.WriteAllText(_filePath, "");
            }
        }

        /// <summary>
        /// 写入txt文件记录信息
        /// </summary>
        /// <param name="_filePath"></param>
        /// <param name="strdata"></param>
        public static void WriteLogToTxt(string _filePath, string strdata)
        {
            StreamWriter sw = System.IO.File.AppendText(@_filePath);
            sw.WriteLine(DateTime.Now.ToLocalTime() + "  " + strdata);
            sw.Flush();
            sw.Close();
        }
    }
}

web.config

    <!--人员 域控 服务器-->
    <add key="DomainServer_AD" value="192.168.1.1"/>
    <!--管理员账号-->
    <add key="ManagerName_AD" value="administrator"/>
    <!--管理员密码-->
    <add key="ManagerPassword_AD" value="1qaz2wsxR"/>

原文地址:https://www.cnblogs.com/foreverfendou/p/8624332.html

时间: 2024-10-07 17:45:42

.net 修改AD域中的密码的相关文章

修改AD域中密码的过期时间

开始---管理工具----Active Directory管理中心 ,鼠标右键点击域,打开域的属性配置窗口,选属性编辑器,找到MaxPwdAge属性,设置为想要的时间.格式为<d:hh:mm:ss>.中间要有冒号.可以填入无和从不--------------如:(无) 和 (从不)  备注()是英文输入法中的括号!!!!永不,代表的是永不过期. (但建议明确指定方便维护.这个地方最容易被忽视.) 同时更新域内的组策略 右键编辑 使生效:强制同步到本地客户端:gpupdate /force 如果

修改域中用户密码

static void Main(string[] args) { //string path = @"LDAP://CN=sp\administrator"; string username = "administrator"; string password = "6yhn^YHN"; string newPwd = "7ujm&UJM"; //DirectoryEntry de = new DirectoryEn

JAVA修改AD域密码_免证书认证

更改用户账户密码,必须要使用ssl方式登录到AD. 网上大部分教程使用TrustStore的方式连接, Hashtable env = new Hashtable(); System.setProperty("javax.net.ssl.trustStore", KEYSTORE); System.setProperty("javax.net.ssl.trustStorePassword", KEYSTORE_PWD); env.put(Context.INITIA

C#获取AD域中计算机和用户的信息

如果你的计算机加入了某个AD域,则可以获取该域中所有的计算机和用户的信息. 所用程序集,需要.Net Framework 4. 添加程序集引用 System.DirectoryServices.AccountManagement 获取AD域名称,未加入AD域的,只能获取计算机名称. 如果未加入任何域,则后续的获取域用户.计算机等操作将无法进行,实例化域上下文对象时,会抛出异常. 1 IPGlobalProperties ipGlobalProperties = IPGlobalPropertie

使用java连接AD域,验证账号密码是否正确

eb项目中有时候客户要求我们使用ad域进行身份确认,不再另外做一套用户管理系统.其实客户就是只要一套账号可以访问所有的OA,CRM等办公系统.这就是第三方验证.一般有AD域,Ldap,Radius,邮件服务器等.最常用的要数AD域了.因为window系统在国内占据了大量的江山.做起来也很方便.我这篇文章就是写,如何用java去实现AD域的身份验证.好了,直接看代码吧: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

AD域中常见属性名词解释

AD域中常见属性名词解释 Active Directory(AD)活动目录 schema对象模型 Organizational Unit(OU)组织单位 Distinguished name(DN)识别名 Canonical Name(CN)正式名称 Domain Controllers(DC)域控制器 displayname显示名称 homephone住宅电话 家庭电话(M) givenname名(F) samaccounttype账号类型 mobile手机 primarygroupid分组I

AD域中客户端时间与服务器时间不同步的解决办法

公司考勤用的是国内一家OA软件里的考勤模块,个人在电脑上在规定时间内登记的形式,客户端都是采取域用户登录的形式,电脑客户端的时间显示比OA登记的时间晚两分钟,[注:OA服务器上安装有时间校正软件iTimeSync,确保OA服务器时间一直保持与标准时间一致],其次每次电脑客户端慢两分钟,大家就晚两分钟下班,久而久之大家发现电脑时间老是与手机的时间慢两分钟就不高兴了, 信息反馈到了信息中心,要求信息中心把大家的时间调整一致,因为域用户无法修改时间,即使你修改后重启电脑后时间又与AD同步了. 域中的计

AD域环境取消密码复杂度和密码使用期限

本地组策略功能中设置密码永不过期的时候发现功能置灰了,不能设置: 这是因为创建域后默认本地组策略功能会被转移到域组策略管理里面,所以我们可以去组策略管理器里去更改组策略,因为一般本地策略的优先级别最低,他会被域的密码策略立即覆盖! 运行"win+R",输入“gpmc.msc”,在default domain policy里修改: 原文地址:https://www.cnblogs.com/jassa/p/10175692.html

记一次AD域域管理员密码更改导致某系统群集管理器故障排查解决过程

环境描述 某公司有一套系统,2台Windows2003系统,采用自带的群集管理器功能实现双机热备功能,正常情况下,服务器10.1.1.1承载中间件应用服务,服务器10.1.1.2承载数据库服务,仅当其中一台服务器故障时才会把资源切换至另一台. 系统名称 系统版本 IP地址 备注 S-EIP-APP Windows2003ENTSP2 10.1.1.1 采用Windows2003自带的群集管理器实现双机热备功能 S-EIP-DATA Windows2003ENTSP2 10.1.1.2 故障表现