当前位置:  开发笔记 > 编程语言 > 正文

创建本地用户帐户c#和.NET 2.0

如何解决《创建本地用户帐户c#和.NET2.0》经验,为你挑选了2个好方法。

如何使用.NET 2.0和c#创建本地用户帐户,并且还能够将"密码永不过期"设置为永不.

我尝试使用Process.Start使用"Net.exe"并传递其参数,但似乎"net user"无法将"Password never expires"设置为never.



1> splattne..:

阅读这篇优秀的CodeProject文章

Howto :(几乎)通过C#在Active Directory中的一切

有一个"创建用户帐户"和"处理用户密码"部分.

更新:

要使本地帐户的代码适应,请使用以下代码替换相应的行:

DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + 
    Environment.MachineName);
DirectoryEntry newUser = localMachine.Children.Add("localuser", "user");

这里启动域帐户的原始代码段:

public string CreateUserAccount(string ldapPath, string userName, 
    string userPassword)
{
    string oGUID = string.Empty;
    try
    {          
        string connectionPrefix = "LDAP://" + ldapPath;
        DirectoryEntry dirEntry = new DirectoryEntry(connectionPrefix);
        DirectoryEntry newUser = dirEntry.Children.Add
            ("CN=" + userName, "user");
        newUser.Properties["samAccountName"].Value = userName;

        int val = (int)newUser.Properties["userAccountControl"].Value; 
        newUser.Properties["userAccountControl"].Value = val | 0x10000; 

        newUser.CommitChanges();
        oGUID = newUser.Guid.ToString();

        newUser.Invoke("SetPassword", new object[] { userPassword });
        newUser.CommitChanges();

        dirEntry.Close();
        newUser.Close();
    }
    catch (System.DirectoryServices.DirectoryServicesCOMException E)
    {
        //DoSomethingwith --> E.Message.ToString();    
    }
    return oGUID;
}

在处理用户密码和密码边界时需要了解一些细节,例如强制用户在下次登录时更改密码,拒绝用户更改自己的密码,设置密码永不过期,何时过期,这些任务可以使用前面部分中演示的UserAccountControl标志来完成.

请参阅这篇精彩的 MSDN文章:管理用户密码 以获取有关这些功能的示例和文档.

CONST                          HEX
------------------------------------------
SCRIPT                         0x0001
ACCOUNTDISABLE                 0x0002
HOMEDIR_REQUIRED               0x0008
LOCKOUT                        0x0010
PASSWD_NOTREQD                 0x0020
PASSWD_CANT_CHANGE             0x0040
ENCRYPTED_TEXT_PWD_ALLOWED     0x0080
TEMP_DUPLICATE_ACCOUNT         0x0100
NORMAL_ACCOUNT                 0x0200
INTERDOMAIN_TRUST_ACCOUNT      0x0800
WORKSTATION_TRUST_ACCOUNT      0x1000
SERVER_TRUST_ACCOUNT           0x2000
DONT_EXPIRE_PASSWORD           0x10000
MNS_LOGON_ACCOUNT              0x20000
SMARTCARD_REQUIRED             0x40000
TRUSTED_FOR_DELEGATION         0x80000
NOT_DELEGATED                  0x100000
USE_DES_KEY_ONLY               0x200000
DONT_REQ_PREAUTH               0x400000
PASSWORD_EXPIRED               0x800000
TRUSTED_TO_AUTH_FOR_DELEGATION 0x1000000



2> 小智..:

此代码将创建一个本地帐户,密码永不过期选项集:

        using System.DirectoryServices;

        DirectoryEntry hostMachineDirectory = new DirectoryEntry("WinNT://localhost");
        DirectoryEntries entries = hostMachineDirectory.Children;
        bool userExists = false;
        foreach (DirectoryEntry each in entries)
        {
            userExists = each.Name.Equals("NewUser",  
            StringComparison.CurrentCultureIgnoreCase);
            if (systemtestUserExists)
                break;
        }

        if (false == userExists)
        {
            DirectoryEntry obUser = entries.Add("NewUser", "User");
            obUser.Properties["FullName"].Add("Local user");
            obUser.Invoke("SetPassword", "abcdefg12345@");
            obUser.Invoke("Put", new object[] {"UserFlags", 0x10000});
            obUser.CommitChanges();
        }

0x10000标志表示PasswordNeverExpires.

我花了很长时间搞清楚如何创建一个密码设置不会过期的本地用户帐户.看来当你尝试使用时:

int val = (int)newUser.Properties["userAccountControl"].Value; 
newUser.Properties["userAccountControl"].Value = val | 0x10000

来自活动目录的权限发挥作用.如果您有活动的目录权限,一切正常.如果不这样,那么获取userAccountControl属性将始终导致null值.尝试设置userAccountControl将导致异常"无法在缓存中找到目录属性".

然而,经过多次狩猎后,我发现需要使用Invoke设置另一个属性"UserFlags".您可以使用它在本地帐户上设置标志.我试过这个代码,它在Windows Server 2008上运行.

希望这可以帮助

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有