通过System.Reflection动态连接System.DirectoryServices

我有一个简单的任务-通过AD中的计算机名称获取PC的DNS名称。

在标准变体中,没问题:

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)。

你能帮我吗?

miyavi16 回答:通过System.Reflection动态连接System.DirectoryServices

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2706795.html

大家都在问