我遇到了无法通过DirectoryEntry
检索AD属性的问题。
我可以通过DirectorySearcher
来获取它,但是我无法通过DirectoryEntry
来获取或设置它。
所需的属性是ms-Mcs-AdmPwdExpirationTime
,其中包含一个NT时间戳,我已经读写了该属性。
DirectoryEntry
控制台中的C#错误
对COM组件的调用已返回错误HRESULT E_FAIL
我尝试使用以下内容,但仍无法检索该属性。
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;
}
答案 0 :(得分:1)
过去用于设置属性,我已将其用于目录条目
路径是对象的完整LDAP路径,但是您可以在上面的示例中替换de
。
希望这足以解决您的问题,或者至少为您指明方向。
还有其他一些答案here,说明为什么可能会出现该错误。
还有here
public Boolean set_AD_property(string attribute_, string new_value)
{
this.AD_object = new DirectoryEntry(this.path_);
this.AD_object.Properties[attribute_].Value = new_value;
try
{
this.AD_object.CommitChanges();
this.AD_object.Close();
return true;
}
catch (System.Exception)
{
return false;
}
}
阅读:
public object get_AD_property(string attribute_)
{
try
{
using (this.AD_object = new DirectoryEntry(this.path_))
{
return this.AD_object.Properties[attribute_].Value;
}
}
catch (ArgumentNullException x)
{
return new ArgumentNullException(x.Message, x);
}
}
尽管这不适用于“ members”或“ memberOf”之类的更复杂的属性