gpt4 book ai didi

c# - DirectoryEntry 更改密码 : Different behavior between Vista/Server2008

转载 作者:太空狗 更新时间:2023-10-29 21:42:11 29 4
gpt4 key购买 nike

在 Vista 开发机器上,我使用此代码成功更改了用户“管理员”密码:

directoryEntry.Invoke("SetPassword", "new");

当我将它移到我的 Server 2008 开发机器上时,该代码不起作用,我不得不使用以下代码:

directoryEntry.Invoke("ChangePassword", new object[] { "old", "new" });

我的问题是,为什么?

对于这两种情况,我都这样创建了我的 DirectoryEntry 对象:

DirectoryEntry directoryEntry = new DirectoryEntry(string.Format("WinNT://{0}/{1}", computerName, username));

谢谢! 8)

如果你们觉得它有帮助,这里是实际代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.DirectoryServices;
using System.Security.Principal;

namespace AccountMod
{
class Program
{
static void Main()
{
Console.WriteLine("Attempting reset...\n");
try
{
String machineNameAndUser = WindowsIdentity.GetCurrent().Name.ToString();
String machineName = WindowsIdentity.GetCurrent().Name.ToString().Substring(0, machineNameAndUser.IndexOf('\\'));
Console.WriteLine("Computer's name: " + machineName);
ResetPassword(machineName, "Administrator", "new");
//ChangePassword("Administrator", "current", "new"); Console.WriteLine("Finished...");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e.StackTrace);
Console.WriteLine(e.InnerException);
}
Console.ReadKey();

}

public static void ResetPassword(string computerName, string username, string newPassword)
{
DirectoryEntry directoryEntry = new DirectoryEntry(string.Format("WinNT://{0}/{1}", computerName, username));
directoryEntry.Invoke("SetPassword", newPassword);
//directoryEntry.Invoke("ChangePassword", new object[] { "current", "new" });
}
}
}

最佳答案

您是(或可以升级到).NET 3.5 吗?用户、组、计算机的 AD 集成在 .NET 3.5 中得到了巨大改进 - 查看 MSDN 文章 Managing Directory Security Principals in the .NET Framework 3.5了解详情。

在您的情况下,您可以执行以下操作:

// establish context for local machine
PrincipalContext ctx = new PrincipalContext(ContextType.Machine);

// find the "Administrator" account
UserPrincipal admin = UserPrincipal.FindByIdentity(ctx, "Administrator");

// set the password to a new value
admin.SetPassword("new-top-secret-password");
admin.Save();

大功告成! WinNT: 提供程序的功能非常有限,应尽可能避免使用。

关于c# - DirectoryEntry 更改密码 : Different behavior between Vista/Server2008,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2615726/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com