Dynami c подключение System.DirectoryServices через System.Reflection - PullRequest
0 голосов
/ 27 января 2020

У меня есть простая задача - получить 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).

Можете ли вы мне помочь?

...