Мне хотелось бы, чтобы кто-нибудь знал способ получить местоположение блокировки пользователя. Лучший способ сделать это — прочитать журнал событий из домена и извлечь местоположение из события безопасности или есть альтернатива?
У меня есть программа для проверки всех пользователей в AD, если они заблокированы, она мне сообщит. Хотелось бы добавить на место локаута.
public void CheckLockedAccounts(PrincipalContext context)
{
Console.WriteLine("\nLocked user accounts:");
try
{
PrincipalSearcher searcher = new PrincipalSearcher(new UserPrincipal(context) { Enabled = true }); // Creating the search object
bool isAnyLocked = false;
foreach (var result in searcher.FindAll()) // Look through what is in the user search object
{
UserPrincipal user = result as UserPrincipal;
if(!user.IsAccountLockedOut() || user == null)
{
continue;
}
if (user != null && user.IsAccountLockedOut()) // Print out all locked users
{
DirectoryEntry directoryEntry = (user.GetUnderlyingObject() as DirectoryEntry);
DateTime? lockoutTime = null;
string workstationName = "N/A";
// TODO - DONE Fix grabbing time lock out for users.
if (directoryEntry.Properties.Contains("lockoutTime"))
{
object lockOutValue = directoryEntry.Properties["lockoutTime"].Value; // grab time of lockout
if (lockOutValue != null)
{
long lockoutTicks = 0;
try
{
var highPart = (int)lockOutValue.GetType().InvokeMember("HighPart", System.Reflection.BindingFlags.GetProperty, null, lockOutValue, null); // deal with COM object to get high and low parts of the lockout time
var lowPart = (int)lockOutValue.GetType().InvokeMember("LowPart", System.Reflection.BindingFlags.GetProperty, null, lockOutValue, null);
lockoutTicks = ((long)highPart 0)
{
lockoutTime = DateTime.FromFileTimeUtc(lockoutTicks).ToLocalTime();
}
}
Console.WriteLine($"\t[{lockoutTime?.ToString("MM-dd-yyyy HH:mm:ss tt")}] - {user.SamAccountName} - Workstation: {workstationName}".Pastel(Color.Crimson));
}
isAnyLocked = true;
}// end of if-statement
}// end of foreach
if (!isAnyLocked)
{
Console.WriteLine($"\tNo accounts are LOCKED!!! YAY!!!.".Pastel(Color.RoyalBlue));
}// end of if-statement
}// end of try-catch
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}".Pastel(Color.IndianRed));
}// end of catch
}// end of CheckLockedAccounts
Подробнее здесь: https://stackoverflow.com/questions/797 ... in-c-sharp
Захват местоположения блокировки пользователя в C# ⇐ C#
Место общения программистов C#
-
Anonymous
1761245163
Anonymous
Мне хотелось бы, чтобы кто-нибудь знал способ получить местоположение блокировки пользователя. Лучший способ сделать это — прочитать журнал событий из домена и извлечь местоположение из события безопасности или есть альтернатива?
У меня есть программа для проверки всех пользователей в AD, если они заблокированы, она мне сообщит. Хотелось бы добавить на место локаута.
public void CheckLockedAccounts(PrincipalContext context)
{
Console.WriteLine("\nLocked user accounts:");
try
{
PrincipalSearcher searcher = new PrincipalSearcher(new UserPrincipal(context) { Enabled = true }); // Creating the search object
bool isAnyLocked = false;
foreach (var result in searcher.FindAll()) // Look through what is in the user search object
{
UserPrincipal user = result as UserPrincipal;
if(!user.IsAccountLockedOut() || user == null)
{
continue;
}
if (user != null && user.IsAccountLockedOut()) // Print out all locked users
{
DirectoryEntry directoryEntry = (user.GetUnderlyingObject() as DirectoryEntry);
DateTime? lockoutTime = null;
string workstationName = "N/A";
// TODO - DONE Fix grabbing time lock out for users.
if (directoryEntry.Properties.Contains("lockoutTime"))
{
object lockOutValue = directoryEntry.Properties["lockoutTime"].Value; // grab time of lockout
if (lockOutValue != null)
{
long lockoutTicks = 0;
try
{
var highPart = (int)lockOutValue.GetType().InvokeMember("HighPart", System.Reflection.BindingFlags.GetProperty, null, lockOutValue, null); // deal with COM object to get high and low parts of the lockout time
var lowPart = (int)lockOutValue.GetType().InvokeMember("LowPart", System.Reflection.BindingFlags.GetProperty, null, lockOutValue, null);
lockoutTicks = ((long)highPart 0)
{
lockoutTime = DateTime.FromFileTimeUtc(lockoutTicks).ToLocalTime();
}
}
Console.WriteLine($"\t[{lockoutTime?.ToString("MM-dd-yyyy HH:mm:ss tt")}] - {user.SamAccountName} - Workstation: {workstationName}".Pastel(Color.Crimson));
}
isAnyLocked = true;
}// end of if-statement
}// end of foreach
if (!isAnyLocked)
{
Console.WriteLine($"\tNo accounts are LOCKED!!! YAY!!!.".Pastel(Color.RoyalBlue));
}// end of if-statement
}// end of try-catch
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}".Pastel(Color.IndianRed));
}// end of catch
}// end of CheckLockedAccounts
Подробнее здесь: [url]https://stackoverflow.com/questions/79798099/grabbing-user-lockout-location-in-c-sharp[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия