1

Тема: VBS: 1C ЗиК -> AD

Привет всем! Возникла следующая идея, автоматизировать обновление/заведение пользователей в AD.

Смысл следующий раз в день выгружать из 1С ЗиК (или любой другой ИС.) список пользователей в текстовый файлик:
---
Табельный номер ФИО Отдел Сокращение Должность Роль Регион Обособленное подразделение Дата актуализации изменений Название организации
ФБк0000279 Иванова Юлия Ивановна Отдел городских продаж ОГП Мерчендайзер Мерчендайзер Башкирский филиал Башкирский филиал 22.04.2011 03:30:55 БФ ООО «Рога и Копыта»
---

Затем скриптом считывать из него и производить обновление/заведение пользователей. Как это реализовать я знаю.
В моем подходе я каждого пользователя ищи в AD сравниваю поля, потом проверяю дату актуальности и при необходимости изменяю поля.

Вопрос в следующем, как можно максимально снизить нагрузку на AD?

2

Re: VBS: 1C ЗиК -> AD

Что значит "снизить нагрузку на AD" я не понял. Лучше привести уже готовый код и указать в нём места, которые кажутся неоптимальными.
Кстати, я бы вообще из 1С ничего не выгружал, а работал бы с AD прямо в коде 1С. На форме элемента справочника Сотрудники сделать кнопку "засунуть в AD" или что-то в этом роде.

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

3

Re: VBS: 1C ЗиК -> AD

А я бы пас появление файла выгрузки в каталоге - например каждые 60 секунд.
Запуск скрипта можно организовать так:
- логон-скрипт
- автозагрузка
- в качестве службы при помощи srvany от Марка Руссиновича
Файл появился - читаем данные в массив и файл можно удалить.
"Снизить нагрузку" сводится к выбору провайдера ADSI. Не знаю какой в Вашей ситуации лучше подойдет: WinNT или LDAP. И тот и другой по-моему не особенно быстро работают. Останется только получить нужный контейнер и отработать с его свойствами и методами.

4

Re: VBS: 1C ЗиК -> AD

The gray Cardinal пишет:

Что значит "снизить нагрузку на AD" я не понял. Лучше привести уже готовый код и указать в нём места, которые кажутся неоптимальными.
Кстати, я бы вообще из 1С ничего не выгружал, а работал бы с AD прямо в коде 1С. На форме элемента справочника Сотрудники сделать кнопку "засунуть в AD" или что-то в этом роде.

Попробую объяснить на простом примере, есть код:

dim qQuery
dim objConnection
dim objCommand
dim objRecordSet
dim objRegExp
dim ReturnVal

qQuery = "<LDAP://dc=examples,dc=ru>;" & _
        "(&(objectCategory=user)(cn=" & returnString(0) & ")(!(userAccountControl:1.2.840.113556.1.4.803:=2)))" & _
       ";distinguishedName,name,sAMAccountName,cn,otherMailbox,mail,title,company,department,telephoneNumber;subtree;"

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Open "Provider=ADsDSOObject;"
objCommand.ActiveConnection = objConnection
objCommand.CommandText = qQuery
Set objRecordSet = objCommand.Execute

While Not objRecordSet.EOF
    Wscript.Echo objRecordSet.Fields("cn")
    objRecordSet.MoveNext
Wend

objConnection.Close

Допустим, что returnString(0) - это считанное из файла ФИО. Получается, что мы будем искать каждое ФИО в AD.

Вопрос не проще ли будет допустим выгружать всех сотрудников из AD(например раз в сутки) в текстовый файл, а потом сравнивать выгрузку из 1С и данный файлик. При необходимости обновим данные в AD.

5

Re: VBS: 1C ЗиК -> AD

SlaDER, как уже советовали — просто добавьте необходимый код непосредственно в процедуру «ПриЗаписи()» в модуль формы элемента справочника «Сотрудники». Проверяйте и, затем, исправляйте или добавляйте.