我有一个 AD 查询,并手动添加属性,但我希望能够将用户可以拥有的所有事件目录属性添加到搜索器。
这是我目前的做法,效果很好,很漂亮...
Dim de As New DirectoryEntry
If getset.impersonationset = True Then
If getset.specificcontainerchecked = True Then
de.Path = "LDAP://" & getset.containerstring()
de.Username = getset.usernameset
de.Password = getset.passwordset
Else
de.Path = "LDAP://" & getset.DomainName()
de.Username = getset.usernameset
de.Password = getset.passwordset
End If
Else
If getset.specificcontainerchecked = True Then
de.Path = "LDAP://" & getset.containerstring()
Else
de.Path = "LDAP://" & getset.DomainName()
End If
End If
Dim deSearch As New DirectorySearcher()
deSearch.SearchRoot = de
deSearch.Filter = "(&(objectClass=User)(objectCategory=Person))"
deSearch.PageSize = 1000
deSearch.SizeLimit = 1000
If getset.specificcontainerchecked = True Then
If getset.subcontainers = True Then
deSearch.SearchScope = SearchScope.Subtree
ElseIf getset.subcontainers = False Then
deSearch.SearchScope = SearchScope.OneLevel
End If
ElseIf getset.specificcontainerchecked = False Then
deSearch.SearchScope = SearchScope.Subtree
End If
deSearch.PropertiesToLoad.Add("sAMAccountName") 'Account Name
deSearch.PropertiesToLoad.Add("givenName") 'Display Name
deSearch.PropertiesToLoad.Add("sn") 'Load Users first name
deSearch.PropertiesToLoad.Add("description") 'Description
deSearch.PropertiesToLoad.Add("userAccountControl") 'Distinguished Name
deSearch.PropertiesToLoad.Add("lastLogonTimestamp") 'Last Login
deSearch.PropertiesToLoad.Add("whenCreated") 'Created Date
deSearch.PropertiesToLoad.Add("whenChanged") 'Changed Date
deSearch.PropertiesToLoad.Add("distinguishedName")
deSearch.PropertiesToLoad.Add("msNPAllowDialin")
deSearch.PropertiesToLoad.Add("cn") 'Wiles, Anthony
deSearch.PropertiesToLoad.Add("co") 'United States
deSearch.PropertiesToLoad.Add("company") 'Company
deSearch.PropertiesToLoad.Add("l") 'Alpharetta
deSearch.PropertiesToLoad.Add("mail") 'Email
deSearch.PropertiesToLoad.Add("st") 'State
所以我想我会尝试将它们全部添加,这样用户就可以选择他们想要的属性......所以我想到了这个。
Dim currSchema As ActiveDirectorySchema = ActiveDirectorySchema.GetCurrentSchema()
Dim collection As ActiveDirectorySchemaClass = currSchema.FindClass("user")
Dim properties As ReadOnlyActiveDirectorySchemaPropertyCollection = collection.GetAllProperties()
Dim enumerator As IEnumerator = properties.GetEnumerator()
While enumerator.MoveNext()
Try
deSearch.PropertiesToLoad.Add(enumerator.Current)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End While
但是对于其中的大多数,我都遇到了以下错误..
Conversion from type 'ActiveDirectorySchemaProperty' to type 'string' is not valid.
关于我遗漏了什么的任何线索?我意识到它无法将 ADSP 强制转换为字符串类型,但我不确定如何修复它。我确定其中一些是 bool 值、整数、日期时间。
最佳答案
vb.net 并不太严格,无法在智能感知中捕捉到这一点,甚至无法构建。 c# 将在智能感知中捕捉到这一点。
改变这一行:
deSearch.PropertiesToLoad.Add(enumerator.Current)
到
deSearch.PropertiesToLoad.Add(enumerator.Current.ToString())
------------ C#版本------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
using System.DirectoryServices.ActiveDirectory;
using System.Collections;
namespace AD
{
class Program
{
static void Main(string[] args)
{
DirectorySearcher deSearch = new DirectorySearcher();
ActiveDirectorySchema currSchema = ActiveDirectorySchema.GetCurrentSchema();
ActiveDirectorySchemaClass collection = currSchema.FindClass("user");
ReadOnlyActiveDirectorySchemaPropertyCollection properties = collection.GetAllProperties();
IEnumerator enumerator = properties.GetEnumerator();
while (enumerator.MoveNext())
{
try
{
deSearch.PropertiesToLoad.Add(enumerator.Current.ToString());
Console.WriteLine(enumerator.Current.ToString());
}
catch (Exception ex)
{
// MessageBox.Show(ex.Message);
}
}
}
}
关于c# - 事件目录查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38175442/