3

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

2 に答える 2

3

Process異なる資格情報でクラスを使用できます。直接設定する代わりに、 ProcessStartInfo.

として実行したいユーザーのクラスにaUserNameとを設定できます (ちなみにis a ) - これをコンストラクターに渡すと、準備完了です。PasswordProcessStartInfoPasswordSecureStringProcess

ProcessStartInfo startInfo = new ProcessStartInfo("net.exe");
startInfo.UserName = Administrator;
startInfo.Password = ...;

...

Process.Start(startInfo);
于 2012-08-31T12:16:40.033 に答える
0

同じエラーが発生し、ProcessStartInfoでDomainパラメーターを指定する必要があることがわかりました。

于 2012-11-26T17:43:15.813 に答える