У меня есть простая задача - получить DNS-имя P C по имени компьютера из AD.
В стандартном варианте нет проблем:
string computerName = "somePC";
var search = new DirectorySearcher
{
Filter = $"(&(objectCategory=computer)(sAMAccountName={computerName}$))"
};
search.PropertiesToLoad.Add("dNSHostName");
var result = search.FindOne();
var dnsName = result.Properties["dNSHostName"][0].ToString();
MessageBox.Show(dnsName);
Но в моей ситуации я могу подключить сборку только динамически через System.Reflection
.
Я знаю, что это плохой вариант. Но у меня нет другого пути.
Я никогда не использовал эту настройку и не могу понять, как я могу это сделать ....
Сначала я подключаю DLL, создаю экземпляры класса и получить некоторые свойства и методы:
string computerName = "somePC";
string filter = $"(&(objectCategory=computer)(sAMAccountName={computerName}$))";
System.Reflection.Assembly dsAsm = System.Reflection.Assembly.LoadFrom(@"C:\Project\System.DirectoryServices.dll");
Type searchClass = dsAsm.GetType("System.DirectoryServices.DirectorySearcher");
System.Reflection.PropertyInfo filterDSprop = searchClass.GetProperty("Filter");
System.Reflection.PropertyInfo proploadDSprop = searchClass.GetProperty("PropertiesToLoad");
System.Reflection.MethodInfo findoneDSmethod = searchClass.GetMethod("FindOne");
Type searchResultClass = dsAsm.GetType("System.DirectoryServices.SearchResult");
System.Reflection.PropertyInfo propertiesProp = searchResultClass.GetProperty("Properties");
System.Reflection.MethodInfo getentryDSmethod = searchResultClass.GetMethod("GetDirectoryEntry");
После этого я должен использовать Activator и Invoke? Но я не понимаю, как я могу использовать методы и свойства и получать значение (dnsname).
Можете ли вы мне помочь?