查询Windows下的密码最长使用时间策略

本文关键字:时间 策略 Windows 密码 查询 | 更新日期: 2023-09-27 17:51:03

我发现了一些检查SECPOL的代码。是否设置复杂度的MSC设置。这是唯一的项目,我似乎处理从Windows安全策略管理器访问设置。有没有人知道一种方法,我可以重新工作,以检查最大密码年龄?我想确保用户设置为90或更低。

我从这里得到了代码:https://gist.github.com/jkingry/421802

        class Program
    {
        static void Passive(string[] args)
        {
            Console.Write(MaxPasswordAgePolicy());
        }
        static bool MaxPasswordAgePolicy()
        {
            var tempFile = Path.GetTempFileName();
            Process p = new Process();
            p.StartInfo.FileName = Environment.ExpandEnvironmentVariables(@"%SystemRoot%'system32'secedit.exe");
            p.StartInfo.Arguments = String.Format(@"/export /cfg ""{0}"" /quiet", tempFile);
            p.StartInfo.CreateNoWindow = true;
            p.StartInfo.UseShellExecute = false;
            p.Start();
            p.WaitForExit();
            var file = IniFile.Load(tempFile);
            IniSection systemAccess = null;
            var MaxPasswordAgeString = "";
            var MaxPasswordAge = ;
            return file.Sections.TryGetValue("System Access", out systemAccess)
                && systemAccess.TryGetValue("MaxPasswordAge", out MaxPasswordAgeString)
                && Int32.TryParse(MaxPasswordAgeString, out MaxPasswordAge)
                && MaxPasswordAge <= 90;
        }
        class IniFile
        {
            public static IniFile Load(string filename)
            {
                var result = new IniFile();
                result.Sections = new Dictionary<string, IniSection>();
                var section = new IniSection(String.Empty);
                result.Sections.Add(section.Name, section);
                foreach (var line in File.ReadAllLines(filename))
                {
                    var trimedLine = line.Trim();
                    switch (line[0])
                    {
                        case ';':
                            continue;
                        case '[':
                            section = new IniSection(trimedLine.Substring(1, trimedLine.Length - 2));
                            result.Sections.Add(section.Name, section);
                            break;
                        default:
                            var parts = trimedLine.Split('=');
                            if (parts.Length > 1)
                            {
                                section.Add(parts[0].Trim(), parts[1].Trim());
                            }
                            break;
                    }
                }
                return result;
            }
            public IDictionary<string, IniSection> Sections { get; private set; }
        }
        class IniSection : Dictionary<string, string>
        {
            public IniSection(string name)
                : base(StringComparer.OrdinalIgnoreCase)
            {
                this.Name = name;
            }
            public string Name { get; private set; }
        }
    }

查询Windows下的密码最长使用时间策略

我可以看到

var MaxPasswordAge = 0;

也许改变这就是你想要的?否则,您可以尝试将值存储在其他地方并检查不同的方法:)

            static bool PasswordComplexityPolicy()
        {
            var tempFile = Path.GetTempFileName();
            Process p = new Process();
            p.StartInfo.FileName = Environment.ExpandEnvironmentVariables(@"%SystemRoot%'system32'secedit.exe");
            p.StartInfo.Arguments = String.Format(@"/export /cfg ""{0}"" /quiet", tempFile);
            p.StartInfo.CreateNoWindow = true;
            p.StartInfo.UseShellExecute = false;
            p.Start();
            p.WaitForExit();
            var file = IniFile.Load(tempFile);
            IniSection systemAccess = null;
            var MaxPasswordAgeString = "";
            var MaxPasswordAge = 0;
            return file.Sections.TryGetValue("System Access", out systemAccess)
                && systemAccess.TryGetValue("MaxPasswordAge", out MaxPasswordAgeString)
                && Int32.TryParse(MaxPasswordAgeString, out MaxPasswordAge)
                && MaxPasswordAge <= 90;
        }