gpt4 book ai didi

c# - 目录搜索器

转载 作者:太空宇宙 更新时间:2023-11-03 10:25:04 25 4
gpt4 key购买 nike

我最初写了一个脚本来在 PowerShell 中生成 Outlook 签名,现在我想把它变成一个具有模板构建和自定义等额外功能的 C# 程序。

初始脚本的美妙之处在于您只需将用户名传递给它,剩下的就由它来完成。提取信息、创建目录结构、输出 HTML 等。

我遇到的问题是在 C# 中从 AD 中提取信息。我一直在尝试使用 DirectoryServices 命名空间来解决这个问题。我想我对它应该如何工作以及应该做什么有基本的了解,但是我不断收到错误,好像我缺少一些重要的东西,比如类型转换,或者如何初始化数据以在应用程序。

这是我的代码,我不知道它有什么问题:

Console.Write("What User do you want properties for?:");
string usr = Console.ReadLine();

DirectoryEntry dir = new DirectoryEntry("OU=users,DC=domain,DC=com");
DirectorySearcher find = new DirectorySearcher(dir, "(&(objectClass=User)(enabled=true)(SAMAccountName=" + usr + "))");
find.PropertiesToLoad.Add("SAMAccountName");
find.PropertiesToLoad.Add("GivenName");
find.PropertiesToLoad.Add("Surname");
find.PropertiesToLoad.Add("StreetAddress");
find.PropertiesToLoad.Add("City");
find.PropertiesToLoad.Add("State");
find.PropertiesToLoad.Add("PostalCode");
find.PropertiesToLoad.Add("OfficePhone");
find.PropertiesToLoad.Add("HomePhone");
find.PropertiesToLoad.Add("Fax");
find.PropertiesToLoad.Add("EmailAddress");
find.PropertiesToLoad.Add("Pager");

Console.WriteLine(find.Filter);

SearchResult res = find.FindOne();

错误出现在我尝试打印到屏幕以确保我拥有正确信息的地方。如下所示:

Console.Write(res);
Console.ReadLine();

编辑:附加信息。

问题似乎是在执行时

SearchResult res = find.findOne();

也是实际的错误是

Unhandled Exception: System.Runtime.InteropServices.COMException: Unspecified Error

at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
at System.DirectoryServices.DirectoryEntry.Bind()
at System.DirectorySerivices.DirectoryEntry.get_AdsObject()
at System.DirecotryServices.DirecotrySearcher.FindAll(Boolean findMoreThanOne)
at System.DirecoryServices.DirectorySearcher.FindOne()
at ConsoleApplication1.Program.Main(String[] args)

此外,编译器输出。我最初的印象是,这是因为我正在编写代码的机器不属于我正在检查的域的一部分,但我也在一台机器上运行可执行文件。

    System.Runtime.InteropServices.COMException was unhandled
ErrorCode=-2147467259
HResult=-2147467259
Message=Unspecified error

Source=System.DirectoryServices
StackTrace:
at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
at System.DirectoryServices.DirectoryEntry.Bind()
at System.DirectoryServices.DirectoryEntry.get_AdsObject()
at System.DirectoryServices.DirectorySearcher.FindAll(Boolean findMoreThanOne)
at System.DirectoryServices.DirectorySearcher.FindOne()
at ConsoleApplication1.Program.Main(String[] args) in c:\users\administrator\documents\visual studio 2015\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs:line 36
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:

最佳答案

在路径中包含协议(protocol)、服务器和端口:

DirectoryEntry dir = new DirectoryEntry("LDAP://servername:port/OU=users,DC=domain,DC=com");

关于c# - 目录搜索器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31925824/

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