Silver Alex

18
Рейтинг

Silver1975



  •   Регистрация: 20.10.2011 (12 лет назад)

  •   Был(а) на сайте: 22.12.2019

Друзья
  • Дмитрий Малышев
  • Евгений Комиссаров
Подписчики 4

Рейтинг 18

Блокировка учетных записей пользователей в Active Directory в соответствии с документами увольнения 1С

Инструменты и обработки Системный администратор Платформа 1С v8.3 1С:Зарплата и Управление Персоналом 2.5 Россия Абонемент ($m) Внешняя обработка (ert,epf) Информационная безопасность Инструменты администратора БД

Внешняя обработка позволяющая выбрать уволенных сотрудников в 1С за период и при желании заблокировать их в Active Directory. При блокировке учетной записи уволенного сотрудника, в AD так же прописывается дата увольнения в поле Описание(Description) в виде: Уволен(а): 17 июня 2011 г.

1 стартмани

20.04.2012    19647    178    Silver1975    42       

18

Комментарии

AdminБлокировка учетных записей пользователей в Active Directory в соответствии с документами увольнения 1С#37 17.05.12 12:51
(35) nanik,
Я к тому, что Вы собираетесь обработку запускать ежедневно? А если от случая к случаю, то она будет носить больше инвентаризационный характер и есть ли тогда смысл устанавливать срок истечения учетки? Проще будет ее просто заблокировать.
AdminБлокировка учетных записей пользователей в Active Directory в соответствии с документами увольнения 1С#34 17.05.12 11:39
(33) nanik,
Ясно, осталось понять по какому принципу устанавливать дату запрета учетной записи, либо блокировать учетку.
AdminБлокировка учетных записей пользователей в Active Directory в соответствии с документами увольнения 1С#32 17.05.12 10:19
(31) nanik,
Цитата
Частенько приказы на увольнение изготавливают заранее, то есть дата приказа 12.05.12, а дата увольнения, например, 25.05.12. Возможно ли таким пользователям в AD устанавливать срок действия учетной записи?
Установить значение в поле "Срок действия учетной записи" юзерской учетки в AD не сложно, но нужно понять как у Вас происходит ввод документа на увольнение в 1С или приказа, т.е. понять какую дату ставить в это поле и от куда ее брать?
AdminБлокировка учетных записей пользователей в Active Directory в соответствии с документами увольнения 1С#30 16.05.12 16:53
(29) nanik,
С кавычками тоже вопрос решаемый, но опять придется вносить изменения в функцию: ПолучитьСписокПользователейAD()
меняем строку:
Код
|    ""SELECT distinguishedName FROM"" & "" '"" & strLDAP & ""' "" & ""WHERE objectClass='user' AND objectCategory='person'""
на
Код
|    ""SELECT distinguishedName FROM"" & "" '"" & Replace(strLDAP, Chr(34), """" & Chr(34)) & ""' "" & ""WHERE objectClass='user' AND objectCategory='person'""
Пример строки: СписВыб.Добавить("LDAP://ou=Тестовое ""подразделение"",dc=XXXXX,dc=RU"); - т.е если подразделение называется к примеру Тестовое "подразделение" для корректной работы необходимо заключить фразу "подразделение" в двойные кавычки.
AdminБлокировка учетных записей пользователей в Active Directory в соответствии с документами увольнения 1С#26 16.05.12 14:38
(25) nanik,
Можно указать: СписВыб.Добавить("LDAP://OU=Отдел организации труда и з\/п,OU=УСМ,OU=Пользователи,dc=XXXXX,dc=RU"); - будет работать.

Подскажите, как я понимаю Вы каждую OU добавляете в список, возможно правильнее будет добавить единственную запись СписВыб.Добавить("LDAP://dc=XXXXX,dc=RU"); чтобы выборка из AD происходила по всем имеющимся UO, или есть какой-то глубинный смысл?
AdminБлокировка учетных записей пользователей в Active Directory в соответствии с документами увольнения 1С#24 16.05.12 13:52
(23) nanik,
Про контейнеры понятно...
Сообщите пожалуйста, все ли корректно отрабатывает после внесенных изменений о которых говорилось выше?
AdminБлокировка учетных записей пользователей в Active Directory в соответствии с документами увольнения 1С#22 16.05.12 12:35
(21) nanik,
Даже не предполагал что могут быть пустые контейнеры...
Ну да ладно, вот что нужно сделать:
1. найти строку objRecordSet.MoveFirst перед ней добавить if objRecordSet.RecordCount <> 0 then
2. найти Loop после него добавить end if

Искать все в той же функции: ПолучитьСписокПользователейAD()

В коде будет выглядеть следующим образом:
Код
   |If objRecordSet.RecordCount <> 0 Then
   |  objRecordSet.MoveFirst

Код
   |  Loop
   |End If
AdminБлокировка учетных записей пользователей в Active Directory в соответствии с документами увольнения 1С#20 16.05.12 9:27
(19) nanik,
Скорей всего связано с тем, что в Вашем контейнере OU=Пользователи кроме учетных записей пользователей имеются так же объекты - Контакт, если это так, необходимо подправить select в функции ПолучитьСписокПользователейAD(). А именно найти строку ""WHERE objectCategory='user'"" и заменить ее на ""WHERE objectClass='user' AND objectCategory='person'""
AdminБлокировка учетных записей пользователей в Active Directory в соответствии с документами увольнения 1С#18 15.05.12 17:56
(16) nanik,
Так же обратите внимание на то, что строка LDAP должна начинаться с LDAP:// а так же быть указана без пробелов между запятыми, имена OU пишутся как есть т.е. без кавычек или апострофов.
AdminБлокировка учетных записей пользователей в Active Directory в соответствии с документами увольнения 1С#17 15.05.12 17:47
(16) nanik,
Сделаем так, запустите нижеуказанный скрипт он пробегает по всему AD показывая наименование организационных единиц и путь к ним, проверьте соответствует ли полученная скриптом строка CN той которую вы писали в обработке:
Код
Const ADS_SCOPE_SUBTREE = 2

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 

Set oRootDSE = GetObject("LDAP://rootDSE")
strBaseDN = "LDAP://" & oRootDSE.Get("defaultNamingContext")

objCommand.CommandText = _
    "SELECT Name, ADsPath FROM " & "'" & strBaseDN & "'" & _
        " WHERE objectCategory='organizationalUnit' ORDER BY Name"  
Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst
Do Until objRecordSet.EOF
  WScript.Echo "OU: " & objRecordSet.Fields("Name").Value & VbCrLf &_
      "CN: " & objRecordSet.Fields("ADsPath").Value
  objRecordSet.MoveNext
Loop