我有一个简单的任务-通过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)。
你能帮我吗?