Ich möchte die Einstellung "Kennwort Ändern Müssen bei der Nächsten Anmeldung" - flag

In meiner Anwendung, die ich bin, Dinge zu tun, die ein Benutzer kann die Kontrolle über seine/Ihre lokale Windows-Benutzerkonto aus meiner app-d.h. erstellen von Benutzerkonten, hinzufügen/entfernen, Passwort, Passwort ändern und auch das aufrufen Passwort-ablaufrichtlinie möglich von meiner app. Nun, an diesem Punkt, die ich brauche, um herauszufinden, Wenn der Benutzer möchte sein Passwort ändern bei der nächsten Anmeldung, was dann passiert. Wie viele Foren und blogs dazu sagen, ich habe die Codierung entsprechend:

Aufrufen, das Kennwort läuft beim Nächsten Anmelden

 public bool InvokePasswordExpiredPolicy()
    {
        try
        {
            string path = GetDirectoryPath();
            string attribute = "PasswordExpired";
            DirectoryEntry de = new DirectoryEntry(path);
            de.RefreshCache(new string[] { attribute });
            if(de.Properties.Contains("PasswordExpired"))
            de.Properties[attribute].Value = 1;
            de.CommitChanges();
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }

Provozieren, das Kennwort läuft beim Nächsten Anmelden. Das flag zurücksetzen,

public bool ProvokePasswordExpiredPolicy()
    {
        try
        {
            string path = GetDirectoryPath();
            string attribute = "PasswordExpired";
            DirectoryEntry de = new DirectoryEntry(path);
            de.RefreshCache(new string[] { attribute });
            de.Properties[attribute].Value = -1;
            de.CommitChanges();
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }

Prüfen, ob die betreffende flag gesetzt ist oder nicht

public bool isPasswordPolicyInvoked()
    {
        try
        {
            string path = GetDirectoryPath();
            string attribute = "PasswordExpired";
            DirectoryEntry de = new DirectoryEntry(path);
            de.RefreshCache(new string[] { attribute });
            int value = Convert.ToInt32(de.Properties[attribute].Value);

            if (value == 1)
                return true;
            else
                return false;
        }
        catch (Exception)
        {
            return false;
        }
    }

Ich bin mit "WinNT", um die Verzeichnis-Pfad, sondern als LDAP. Ich habe folgende Methode, um bekommen, den Verzeichnis-Pfad.

private String GetDirectoryPath()
    {
        String uName = this.userName;
        String mName = this.userMachine;

        String directoryPath = "WinNT://" + mName + "/" + uName;

        return directoryPath;
    }

ist es etwas, was ich bin fehlt? Helfen Sie mir hier draußen.

Hinweis: Erstens, ich verwendet pwdLastSet - Attribut auf 0 gesetzt werden(für auf) und -1(für off), der eine Ausnahme auslöst "Directory-Eigenschaft Nicht in der Eigenschaft Cache", später entdeckte ich, dass WinNT nicht unterstützt dieses Attribut, vielmehr unterstützt es PasswordExpired muss 1 sein, um die Flagge. Das ist, was ich getan habe.

InformationsquelleAutor jchoudhury | 2012-06-27
Schreibe einen Kommentar