gpt4 book ai didi

c# - 事件目录查询问题

转载 作者:行者123 更新时间:2023-11-30 23:23:45 24 4
gpt4 key购买 nike

我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com