Ce code va créer un compte local avec le mot de passe n'expire jamais ensemble:
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", "[email protected]");
obUser.Invoke("Put", new object[] {"UserFlags", 0x10000});
obUser.CommitChanges();
}
Le drapeau 0x10000 signifie PasswordNeverExpires.
J'ai passé beaucoup de temps à déterminer comment créer un compte utilisateur local avec le mot de passe défini pour ne pas expirer. Il semble que lorsque vous essayez d'utiliser:
int val = (int)newUser.Properties["userAccountControl"].Value;
newUser.Properties["userAccountControl"].Value = val | 0x10000
les autorisations du répertoire actif entrent en jeu. Si vous disposez d'autorisations de répertoire actives, tout fonctionne correctement. Si vous n'obtenez pas la propriété userAccountControl, la valeur null sera toujours définie. Essayer de définir userAccountControl entraînera une exception "La propriété de répertoire ne peut pas être trouvée dans le cache".
Cependant, après beaucoup de chasse, j'ai trouvé une autre propriété "UserFlags" qui doit être définie en utilisant Invoke. Vous pouvez l'utiliser pour définir l'indicateur sur un compte local. J'ai essayé ce code et cela a fonctionné sur Windows Server 2008.
Espérons que cela aide
Les liens que vous avez spécifiés sont pour le répertoire actif. Peut-être que je n'étais pas clair. Je veux changer de compte d'utilisateur local (L'ordinateur ne fait pas partie d'un répertoire actif). – mrtaikandi
Autant que je m'en souvienne, cela devrait s'appliquer aussi aux comptes locaux. – splattne
@ Mohammadreza: J'ai mis à jour ma réponse. Maintenant, il y a du code qui gère les comptes locaux – splattne