Как получить значение параметра локальной политики безопасности: Пароль должен отвечать требованиям сложности - C#
Формулировка задачи:
Здравствуйте.
Никак не могу найти подходящий способ получить значение параметра локальной политики безопасности (Политика учётных записей -> Политика паролей): "Пароль должен отвечать требованиям сложности" (Включен или Выключен).
Для пк которые в домене - нашёл способ получения через: WMI RSOP_SecuritySettingBoolean class.
Для пк которые не в домене - он не срабатывает у меня.
Также встречал способ через парсинг вывода утилиты secedit.exe: secedit /export /cfg c:\local.cfg. Но это какой-то костыль, он заметно усложняет мне проект (это крайний вариант). Может быть есть другие способы, через стандартные классы, например: DirectoryEntry или PrincipalContext.
Вообще, мне нужно два значения параметра локальной политики безопасности:
1) Минимальная длина пароля.
2) Пароль должен отвечать требованиям сложности.
Первое значение я получаю методом парсинга вывода команды net account, а вот второе значение никак не могу получить.
При этом создаётся файл (seceditOut.txt) с содержанием:
Считываю нужные значения и удаляю файл.
Пока остановился на этом решении...
С Уважением, Павел.
Итак, суть моего обращения:
Может быть кто-нибудь подскажет, как в C# получить значение локальной политики безопасности (Политика учётных записей -> Политика паролей): "Пароль должен отвечать требованиям сложности" (Включен или Выключен) для ПК, который не в домене ???
С Уважением, Павел...
Пока что решил свою задачу методом, предложенным здесь:
http://stackoverflow.com/questions/1...ctory-settings.
string tempFileSeceditOut = AppDomain.CurrentDomain.BaseDirectory + "seceditOut.txt"; // temp file
// secedit.exe
Process secedit = new Process();
secedit.StartInfo.FileName = Environment.ExpandEnvironmentVariables(@"%SystemRoot%\system32\secedit.exe");
secedit.StartInfo.Arguments = String.Format(@"/export /cfg ""{0}"" /quiet", tempFileSeceditOut);
secedit.StartInfo.UseShellExecute = false;
secedit.StartInfo.CreateNoWindow = true;
secedit.Start();
secedit.WaitForExit();
// Read first 8 lines of temp file
StreamReader readFile = new StreamReader(tempFileSeceditOut);
List<string> fileReadLines = new List<string>();
for(int i=0; i<8; i++)
fileReadLines.Add(readFile.ReadLine());
readFile.Close();
File.Delete(tempFileSeceditOut);
string MinimumPasswordLength = fileReadLines[5].Split('=')[1].Trim();
string PasswordComplexity = fileReadLines[6].Split('=')[1].Trim();[Unicode] Unicode=yes [System Access] MinimumPasswordAge = 0 MaximumPasswordAge = 42 MinimumPasswordLength = 13 PasswordComplexity = 1 PasswordHistorySize = 0 LockoutBadCount = 0 RequireLogonToChangePassword = 0 ForceLogoffWhenHourExpire = 0 NewAdministratorName = "Administrator" NewGuestName = "Guest" ClearTextPassword = 0 LSAAnonymousNameLookup = 0 EnableAdminAccount = 1 EnableGuestAccount = 0 [Event Audit] AuditSystemEvents = 0 AuditLogonEvents = 0 AuditObjectAccess = 0 AuditPrivilegeUse = 0 AuditPolicyChange = 0 AuditAccountManage = 0 AuditProcessTracking = 0 AuditDSAccess = 0 AuditAccountLogon = 0 ...............................................
Решение задачи: «Как получить значение параметра локальной политики безопасности: Пароль должен отвечать требованиям сложности»
textual
Листинг программы
string tempFileSeceditOut = Path.GetTempFileName();