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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie über die Verwendung von System.DirectoryServices.Kontoverwaltung statt, in diesem Fall können Sie rufen Sie den folgenden code:
Den code unten sollte funktionieren:
Vom Benutzer Muss Kennwort Ändern bei der Nächsten Anmeldung (LDAP-Anbieter):
Ich verfolgte diese nach unten. Dies entspricht der
UserPrincipal.LastPasswordSet
Eigenschaft.Die Eigenschaft ist schreibgeschützt, so müssen Sie mit diesen Methoden:
In meinem Fall lege ich Variablen zu verfallen, oder aktualisieren Sie das Kennwort auf dem nächsten speichern statt in die Eigenschaft setter.