Active directory 2003. Получить список пользователей #512737


#0 by YF
Пытаюсь vb скриптом прочитать данные пользователей домена ActiveDirectory 2003: подключаюсь любым из двух способов: Set container_ = GetObject("WinNT://" & domainName_) Set container_ = GetObject("LDAP://CN=users,dc=" & domainName_ & ",dc=com") Беру данные: container_.Filter = Array("User") For Each user_ In container_    user_.Name 'все ОК    user_.FullName 'все ОК    user_.FirstName 'вот тут ошибка: "Свойства службы каталогов не могут быть найдены в кэше" Next Как забрать данные, те, на которые ругается? ЗЫ: При этом пишется нормально: 'Берем контейнер Users домена Set cont = GetObject("LDAP://CN=Users,dc=" & domainName_ & ",DC=com") 'Создаем нового пользователя с именем: Set usr = cont.Create("user", "CN=jeffsmith") 'Имя usr.Put "givenName", "givenName" 'Фамилия usr.Put "sn", "sn" 'Выводимое имя usr.Put "DisplayName", "DisplayName" 'Адрес электронной почты usr.Put "mail", "jeffsmith@w.ru" 'Имя входа пользователя usr.Put "userPrincipalName", "userPrincipalName" 'Имя входа пользователя (пред. Windows) usr.Put "samAccountName", "samAccountName" 'Зафиксируем изменения usr.SetInfo
#1 by hd1
где пишется "FirstName"?
#2 by YF
(*) Решил проблему, вот решение, вдруг кому пригодится: Одно замечание: работает для доменов вида: ИмяДомена.com, кому надо может изменить. Вот содержимое файла vbs: ' Это содержимое vbs файла. Этот файл создает текстовый файл ' с именем МоеИмяДомена_Users.txt в том же каталоге, где расположен сам vbs файл, ' читает пользователей домена и записывает из в этот самый текстовый файл '------- © YF 2010 -------------------- Sub ToTakeFromConteiner(paramConteiner, paramTextStream) 'Отфильтруем пользователей и возьмем их paramConteiner.Filter = Array("User") For Each user_ In paramConteiner If Ucase(user_.Class) = Ucase("user") Then ' прочитаем данные user_.GetInfoEx Array("cn","givenName","sn","DisplayName","mail","userPrincipalName","samAccountName"), 0 ' Сформируем строку str_ = user_.cn & "#" & user_.givenName & "#" & user_.sn & "#" & user_.DisplayName & "#" & user_.mail & "#" & user_.userPrincipalName & "#" & user_.samAccountName ' Запишем в текстовый файл paramTextStream.WriteLine str_ End if'Ucase(user_.Class) = Ucase("user") Next'Each user_ In container_ ' Если это была организационная группа, то нужно обработать рекурсивно ее подгруппы If UCase(paramConteiner.Class) = UCase("organizationalUnit") Then paramConteiner.Filter = Array ' Снова организационная единица, обработаем рекурсивно For Each conteinerFromOU_ In paramConteiner ToTakeFromConteiner conteinerFromOU_, paramTextStream Next'Each conteinerFromOU_ In paramConteiner End if'UCase(container_.Class) = UCase("organisationUnit") End Sub'ToTakeFromConteiner '------- © YF 2010 -------------------- Sub ToTakeFromDomain(paramDomainName, paramTextStream) ' Попробуем соединиться с доменом Set containerAll_ = GetObject("LDAP://dc=" & paramDomainName & ",dc=com") For Each container_ In containerAll_ ToTakeFromConteiner container_, paramTextStream Next'Each container_ In containerAll End Sub'ToTakeFromDomain '------- © YF 2010 -------------------- Sub ToGo(paramDomainName) ' Посмотрим папку, в которой лежит скрипт. В нее же и положим файл лога fullName_ = WScript.ScriptFullName name_ = WScript.ScriptName folderPath_ = Replace(fullName_, name_, "") ' Создадим текстовый файл, в который выгрузим данные о пользователях Set FSO = CreateObject("Scripting.FileSystemObject") Set Folder = FSO.GetFolder(folderPath_) logFileFullName_ = paramDomainName & "_users.txt" Set textStream_ = Folder.CreateTextFile(logFileFullName_) ' Вызовем процедуру обработки домена ToTakeFromDomain paramDomainName, textStream_ ' Скажем, что все закончилось Set WshShell = CreateObject("WScript.Shell") wshShell.Run "notepad.exe " & logFileFullName_ End Sub'ToGo '------- © YF 2010 -------------------- ' Запустим основную процедуру ToGo "МоеИмяДомена"
Тэги: Админ
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С