Windows - Управление локальными пользователями - PullRequest
0 голосов
/ 14 февраля 2011

Я пытаюсь реализовать скрипт / утилиту, которая переименовывает пользователя, устанавливает пароль по умолчанию, а затем предложит пользователю изменить свой пароль при первоначальном входе в Windows Server 2003. Я могу выполнить первые 2 пунктано не третий.В частности, я хочу, чтобы пользователь столкнулся с диалоговым окном Windows, которое гласит следующее: «Вы должны изменить свой пароль при первом входе в систему» ​​Затем он переносит их в диалоговое окно «Изменить пароль», в котором есть кнопки «ОК» и «Отмена».Если они нажимают кнопку отмены, они переходят на начальный экран входа в систему.

Я реализовал приведенный ниже код, чтобы попытаться выполнить это.Вместо этого я получаю поведение, состоящее в том, что пользователю предоставляется диалоговое окно, в котором говорится, что срок действия пароля истек и должен быть изменен, и ему предлагается это сделать.Тем не менее, пользователь может просто нажать «Отмена», и пользователь вошел в систему. Утилита написана на языке c #, но я открыт для другого языка, если он облегчит задачу.

DirectoryEntry directory = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");
DirectoryEntry userEntry = directory.Children.Find("defaultUsername"); 
userEntry.Rename("theUser");
userEntry.Invoke("SetPassword", new object[] { "defaultPassword" });
userEntry.Properties["PasswordExpired"].Value = 1; 
userEntry.Properties["UserFlags"].Value = 0x800201; 
userEntry.CommitChanges();

Ответы [ 2 ]

1 голос
/ 13 марта 2011

Нельзя использовать UserFlags 0x800000 для установки пароля с истекшим сроком действия - см. здесь . Использование PasswordExpired = 1 должно быть достаточно. Вы пробовали это с UserFlags = 0x201?

0 голосов
/ 14 февраля 2011

userEntry.Properties ["PasswordExpired"]. Значение = 0;

Я думаю, вот в чем проблема

...