Как получить значение параметра локальной политики безопасности: Пароль должен отвечать требованиям сложности - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Никак не могу найти подходящий способ получить значение параметра локальной политики безопасности (Политика учётных записей -> Политика паролей): "Пароль должен отвечать требованиям сложности" (Включен или Выключен). Для пк которые в домене - нашёл способ получения через: WMI RSOP_SecuritySettingBoolean class. Для пк которые не в домене - он не срабатывает у меня. Также встречал способ через парсинг вывода утилиты secedit.exe: secedit /export /cfg c:\local.cfg. Но это какой-то костыль, он заметно усложняет мне проект (это крайний вариант). Может быть есть другие способы, через стандартные классы, например: DirectoryEntry или PrincipalContext. Вообще, мне нужно два значения параметра локальной политики безопасности: 1) Минимальная длина пароля. 2) Пароль должен отвечать требованиям сложности. Первое значение я получаю методом парсинга вывода команды net account, а вот второе значение никак не могу получить.
Итак, суть моего обращения: Может быть кто-нибудь подскажет, как в 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();
При этом создаётся файл (seceditOut.txt) с содержанием:
[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();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.6 из 5
Похожие ответы