Questo codice crea un account locale con la password non scade mai set di opzioni:
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();
}
Il 0x10000 bandiera significa PasswordNeverExpires.
Ho trascorso molto tempo a capire come creare un account utente locale con la password impostata per non scadere. Sembra che quando si tenta di utilizzare:
int val = (int)newUser.Properties["userAccountControl"].Value;
newUser.Properties["userAccountControl"].Value = val | 0x10000
autorizzazioni dalla directory attiva entrano in gioco. Se hai permessi di directory attivi tutto funziona correttamente. Se non si ottiene la proprietà userAccountControl, verrà sempre generato un valore nullo. Cercando di impostare userAccountControl si otterrà un'eccezione "La proprietà della directory non può essere trovata nella cache".
Tuttavia dopo una lunga ricerca in giro ho trovato un'altra proprietà "UserFlags" che deve essere impostata utilizzando Invoke. Puoi usarlo per impostare il flag su un account locale. Ho provato questo codice e ha funzionato su Windows Server 2008.
Spero che questo aiuti
fonte
2009-03-24 11:52:39
I collegamenti specificati sono per la directory attiva. Forse non ero chiaro. Voglio cambiare l'account utente locale (il computer non fa parte di una directory attiva). – mrtaikandi
Per quanto mi ricordo dovrebbe valere anche per gli account locali. – splattne
@ Mohammadreza: ho aggiornato la mia risposta. Ora c'è un codice che gestisce gli account locali – splattne