Erstellen von lokalen Benutzerkonto c # und .NET 2.0
Frage
Wie kann ich ein lokales Benutzerkonto unter Verwendung von .NET 2.0 und c # und auch in der Lage sein, um das erstellen „Kennwort läuft nie“ nie.
Ich habe versucht, „Net.exe“ mit Process.Start verwenden und seine Parameter übergeben, aber es scheint, dass die „net user“ ist nicht in der Lage, um „Kennwort läuft nie ab“ nie.
Lösung
Lesen Sie diesen ausgezeichneten Artikel Codeproject
Howto: (Fast) Alles in Active Directory über C #
Es gibt einen Abschnitt "Create User Account" und "Umgang mit User-Passwörter".
UPDATE:
den Code Zur Anpassung für lokale Konten der jeweiligen Linien mit diesen ersetzen:
DirectoryEntry localMachine = new DirectoryEntry("WinNT://" +
Environment.MachineName);
DirectoryEntry newUser = localMachine.Children.Add("localuser", "user");
Hier beginnt den ursprünglichen Code-Schnipsel für Domänenkonten:
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;
}
Es gibt einige Besonderheiten zu verstehen wenn mit Benutzerpasswörtern zu tun und Grenzen um Passwörter wie ein Benutzer gezwungen zu ändern, um ihre Passwort auf der nächsten Anmeldung, zu leugnen, der Benutzer das Recht, ihre eigenen zu ändern Passwörter, das Setzen von Passwörtern nie verfallen, wann auslaufen, und diese Aufgaben können erreicht werden unter Verwendung Useraccountcontrol-Flags, die sind im Verfahren gezeigt, Abschnitte.
Bitte beachten Sie diese große MSDN-Artikel: Verwalten von Benutzerpasswörtern Beispiele und Dokumentation in Bezug auf diese Eigenschaften.
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
Andere Tipps
Dieser Code wird ein lokales Konto mit dem Kennwort erstellen läuft nie Option Satz:
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();
}
Die 0x10000 Flagge bedeutet PasswordNeverExpires.
Ich verbrachte eine lange Zeit, herauszufinden, wie ein lokales Benutzerkonto mit dem Kennwort nicht auslauf zu erstellen. Es scheint, dass, wenn Sie versuchen, zu verwenden:
int val = (int)newUser.Properties["userAccountControl"].Value;
newUser.Properties["userAccountControl"].Value = val | 0x10000
Berechtigungen von Active Directory ins Spiel kommen. Wenn Sie Active Directory-Berechtigungen verfügen, funktioniert alles einwandfrei. Wenn Sie nicht dann die Eigenschaft Useraccountcontrol bekommen werden immer in einem Nullwert zur Folge hat. Useraccountcontrol zu einer Ausnahme führen zu setzen versuchen, „Das Verzeichnis Eigenschaft kann nicht im Cache gefunden werden.“
Doch nach viel Jagd um fand ich eine andere Eigenschaft „Userflags“, die Invoke eingestellt werden muss, verwenden. Damit können Sie die Flagge auf einem lokalen Konto eingerichtet werden soll. Ich habe diesen Code versucht, und es hat funktioniert auf Windows Server 2008.
Hope, das hilft
mit 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();