Сначала я написал сценарий для создания подписи Outlook, в PowerShell, и теперь я хочу, чтобы превратить его в C# программы с дополнительными функциями, как шаблон здание и настройка и т.д.Каталога поискового
Красоты первоначального сценария что вы просто передаете ему имя пользователя, а все остальное. Вытягивает информацию, создает структуру каталогов, выплевывает HTML и т. Д.
У меня возникают проблемы с вытаскиванием информации из AD на C#. Я пытался это сделать с помощью пространства имен 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:
Вы должны пытаться напечатать объект на экране вот почему этот вопрос. Попробуйте напечатать его, что свойства объектов. –
Если вы обновите вопрос с ошибкой, которая будет полезна. Без ошибок трудно представить, какова ваша проблема. –
В качестве примечания вы можете захотеть добавить некоторую проверку, чтобы гарантировать, что пользователь вводит данные, которые не просто приводят к сбою программы со странными ошибками. – Kupiakos