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.

War es hilfreich?

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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top