检查windows帐户密码是否设置为c#中允许过期
本文关键字:许过期 过期 windows 密码 设置 是否 检查 | 更新日期: 2023-09-27 17:50:31
我到处寻找检查本地帐户密码策略的本地用户管理器设置的方法。从本质上讲,我只是想让我的应用程序告诉我,如果当前用户帐户密码设置为过期说"通过"或"失败"在一个文本框中。我检查了WMIC和其他一些参考资料,没有发现任何有价值的东西。任何想法吗?
编辑:我走了一条稍微不同的路线,并在后台以管理权限调用CMD ' string domainName = System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split(''').First();;dName。Text = domainName;
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split('''').Last(); ;
user.Text = userName;
Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.Arguments = "/c net user" + " " + user.Text;
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.RedirectStandardError = true;
cmd.Start();
//* Read the output (or the error)
string output = cmd.StandardOutput.ReadToEnd();
RtextBox2.Text = output;
cmd.WaitForExit();
// Check string for specific value of "Password expires Never" if NOT present, pass the client. If PRESENT Fail the client. Override in next section below.
if (RtextBox2.Text.Contains("Password expires Never") == false)
{
pwexpire.Text = "PASS";
}
else
{
pwexpire.Text = "FAIL";
}`.
WMIC是WMI的命令行,我不知道你为什么要走这条路。
大多数Windows的认证系统是通过ADSI控制的,而不是WMI。
对于LDAP (Active Directory)帐户,这里是规范的白皮书:https://support.microsoft.com/en-us/kb/323750/(它是在VBScript中,但可以为c#进行简单的修改)。
对于本地帐户,我认为您无法获得到期日期,但您可以检查userFlags
选项,看看是否启用了到期要求。
显然,在。net 3.5中,微软增加了System.DirectoryServices.AccountManagement
,使这更容易:
using System.DirectoryServices.AccountManagement;
// create a machine-context (local machine)
PrincipalContext ctx = new PrincipalContext( ContextType.Machine );
UserPrincipal user =
UserPrincipal.Current;
// Or use `FindByIdentity` if you want to manually specify a user.
// UserPrincipal.FindByIdentity( ctx, IdentityType.Sid, <YourSidHere> );
if( user != null ) {
Console.WriteLine("Password expires: {0}", !user.PasswordNeverExpires );
}
在这里记录:https://msdn.microsoft.com/en-us/library/system.directoryservices.accountmanagement.userprincipal(v=vs.110).aspx