我想使用c#代码创建一个Windows用户。当登录用户具有管理员权限时,下面的方法可以正常工作。它不适用于受限用户。请注意,我可以传递管理员用户的Windows用户名和密码。基本上我想模仿。我试过冒充它没用。我尝试将用户namd和密码传递给processinfo。我收到错误“存根收到坏数据”。所以任何人都可以通过模仿来帮助我使用c#代码创建windows用户。
public static void CreateUser(string userName, string password, string description, string adminUserName, string adminPassword)
{
Process process = new Process();
ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.WorkingDirectory = Environment.SystemDirectory;
processInfo.FileName = "net.exe";
processInfo.UseShellExecute = false;
processInfo.RedirectStandardError = true;
processInfo.RedirectStandardInput = true;
processInfo.RedirectStandardOutput = true;
processInfo.WindowStyle = ProcessWindowStyle.Hidden;
processInfo.Arguments = @" user " + userName + @" " + password + @" /ADD /ACTIVE:YES " +
@"/EXPIRES:NEVER /FULLNAME:" + userName + @" /PASSWORDCHG:NO /PASSWORDREQ:YES";
if (!string.IsNullOrEmpty(adminUserName))
{
processInfo.UserName = adminUserName;
processInfo.Password = WindowsSecurityHelper.GetSecuredString(adminPassword);
}
process.StartInfo = processInfo;
process.Start();
process.WaitForExit();
process.Close();
}
或
public static void CreateUser(string userName, string password, string description, string userGroup = "Users")
{
PrincipalContext pc = new PrincipalContext(ContextType.Machine, null);
GroupPrincipal gp = GroupPrincipal.FindByIdentity(pc, userGroup);
if (gp != null)
{
UserPrincipal u = new UserPrincipal(pc);
u.SetPassword(password);
u.Name = userName;
u.Description = description;
u.UserCannotChangePassword = true;
u.PasswordNeverExpires = true;
u.Save();
gp.Members.Add(u);
gp.Save();
}
}
答案 0 :(得分:3)
您可以使用具有不同凭据的Process
类 - 而不是直接设置它,使用ProcessStartInfo
。
您可以在UserName
课程中为您要执行的用户设置Password
和ProcessStartInfo
,Password
是SecureString
,方式) - 将其传递给Process
构造函数,你就可以了。
ProcessStartInfo startInfo = new ProcessStartInfo("net.exe");
startInfo.UserName = Administrator;
startInfo.Password = ...;
...
Process.Start(startInfo);
答案 1 :(得分:0)
我遇到了同样的错误,发现我需要在ProcessStartInfo中指定Domain参数。