Создание локальной учетной записи пользователя c# and.NET 2.0
Как я могу создать локальную учетную запись Пользователя с помощью .NET 2.0 и c#, а также установить "пароль никогда не истекает" на никогда.
Я попытался использовать " Net.exe " с помощью процесса.Запуск и передача его параметров, но кажется, что " сетевой пользователь "не может установить" пароль никогда не истекает " никогда.
3 ответов
прочитайте эту отличную статью CodeProject
Howto: (почти) все в Active Directory через C#
есть раздел "создать учетную запись Пользователя"и" работа с паролями пользователей".
обновление:
чтобы адаптировать код для локальных учетных записей, замените соответствующие строки следующими:
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;
}
есть некоторые особенности, чтобы понять при работе с паролями пользователей и границы вокруг паролей, таких как принуждение пользователя к изменению пароль при следующем входе в систему, отрицание пользователь имеет право изменять свои собственные пароли, Настройки, Пароли не истекает, когда истекать, и эти задачи могут быть выполнены с помощью Контроль флагов показали в предыдущих разделы.
пожалуйста, обратитесь к этому великому статья 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
этот код создаст локальную учетную запись с параметром пароль никогда не истекает:
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
разрешения из active directory вступают в игру. Если у вас есть разрешения active directory, все работает нормально. Если вы не получаете свойство userAccountControl всегда приводит к нулевому значению. Попытка установить userAccountControl приведет к исключению "свойство каталога не может быть найдено в кэше".
однако после долгой охоты я нашел другое свойство "UserFlags", которое нужно установить с помощью Invoke. Вы можете использовать это, чтобы установить флаг для локальной учетной записи. Я пробовал этот код, и он работал на windows server 2008.
надеюсь, что это помогает
использование системы.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();