Этот код создаст локальную учетную запись с установленным параметром пароля, который никогда не истекает:
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 всегда будет иметь нулевое значение. Попытка установить userAccountControl приведет к исключению «Не удается найти свойство каталога в кэше».
Однако после долгих поисков я нашел другое свойство "UserFlags", которое нужно установить с помощью Invoke. Вы можете использовать это, чтобы установить флаг для локальной учетной записи. Я пробовал этот код, и он работал на Windows Server 2008.
Надеюсь, это поможет