У меня возникла проблема, когда я не могу получить атрибут AD с помощью DirectoryEntry
.Я могу получить его через DirectorySearcher
, но я не могу получить или установить его через DirectoryEntry
.
Необходимый атрибут ms-Mcs-AdmPwdExpirationTime
, который содержит метку времени NT, я прочитал и записал в нееатрибут.
DirectoryEntry
C # ошибка в консоли
Ошибка HRESULT E_FAIL был возвращен после вызова COM-компонента
Я пыталсяиспользуя следующее, но все еще не может получить атрибут.
RefreshCache (string[] propertyNames);
РЕДАКТИРОВАТЬ:
ComputerPrincipal comp = ComputerPrincipal.FindByIdentity(ctx, MachineName);
DirectoryEntry de = (DirectoryEntry)comp.GetUnderlyingObject();
if (de.Properties.Contains("ms-Mcs-AdmPwd") == true)
{
string Password = (String)de.Properties["ms-Mcs-AdmPwd"][0];
Password_Input.Text = Password;
DateTime NTTime = DateTime.FromFileTime(ConvertLargeIntegerToLong(de.Properties["ms-Mcs-AdmPwdExpirationTime"].Value));
PasswordExpiry_Value.Text = NTTime.ToString("dd/MM/yyyy hh:mm:ss");
Console.WriteLine();
}
else
{
Password_Input.Text = "Password not set by LAPS";
}
// down the bottom of the .cs
private static long ConvertLargeIntegerToLong(object largeInteger)
{
var type = largeInteger.GetType();
var highPart = Convert.ToInt32(type.InvokeMember("HighPart", BindingFlags.GetProperty, null, largeInteger, null));
var lowPart = Convert.ToInt32(type.InvokeMember("LowPart", BindingFlags.GetProperty, null, largeInteger, null));
return (long)highPart << 32 | (uint)lowPart;
}