检查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";
            }`. 

检查windows帐户密码是否设置为c#中允许过期

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