Полезные процедуры работы с AD
Надоели просить меня запостить рабочие модули работы с AD, вот запостил, в качестве бонуса убийца любого процесса в памяти любого компа.
ps
для работы нужны определенные права.
- Описание
- Подробнее
Описание
Функция ПолучитьСписокДоменов () Экспорт Результат = Новый Массив(); objNameSpace = ""; Попытка objNameSpace = ПолучитьCOMОбъект("WinNT:"); м = Новый Массив(); м.Добавить("domain"); // Computer User Group GlobalGroup domain м2 = Новый COMSafeArray(м, "VT_VARIANT"); objNameSpace.Filter = м2; Для каждого item Из objNameSpace Цикл Результат.Добавить(item.Name); КонецЦикла; Исключение Результат.Очистить(); КонецПопытки; Возврат Результат; КонецФункции Функция ПолучитьСписокГруппВДомене (ИмяДомена, ТипГрупп = "GlobalGroup") Экспорт Результат = Новый Массив(); objNameSpace = ""; Попытка objNameSpace = ПолучитьCOMОбъект("WinNT://"+СокрЛП(ИмяДомена)); м = Новый Массив(); м.Добавить(ТипГрупп); // Computer User Group GlobalGroup domain м2 = Новый COMSafeArray(м, "VT_VARIANT"); objNameSpace.Filter = м2; Для каждого item Из objNameSpace Цикл Результат.Добавить(item.Name); КонецЦикла; Исключение Результат.Очистить(); КонецПопытки; Возврат Результат; КонецФункции Функция ПолучитьСписокПользователейВГруппеДомена (ИмяДомена, ИмяГруппы) Экспорт Результат = Новый Массив(); objNameSpace = ""; Попытка objNameSpace = ПолучитьCOMОбъект("WinNT://" + СокрЛП(ИмяДомена) + "/" + СокрЛП(ИмяГруппы) + ", Group"); Для каждого item Из objNameSpace.Members() Цикл Результат.Добавить(item.Name); КонецЦикла; Исключение Результат.Очистить(); КонецПопытки; Возврат Результат; КонецФункции Функция ПользовательВГруппеДомена (ИмяДомена, ИмяГруппы, ИмяПользователя) Экспорт Результат = Ложь; Массив = ПолучитьСписокПользователейВГруппеДомена (СокрЛП(ИмяДомена), ИмяГруппы); Для каждого элМассив из Массив Цикл Если ВРег(элМассив) = ВРег(СокрЛП(ИмяПользователя)) Тогда // пользователь уже в группе Результат = Истина; Прервать; КонецЕсли; КонецЦикла; Возврат Результат; КонецФункции Функция ДобавитьПользователяВГруппуДомена (ИмяДомена, ИмяГруппы, ИмяПользователя) Экспорт Результат = Ложь; element_user = ""; element_group = ""; Попытка element_user = ПолучитьCOMОбъект("WinNT://" + ИмяДомена + "/" + ИмяПользователя + ", user"); element_group = ПолучитьCOMОбъект("WinNT://" + ИмяДомена + "/" + ИмяГруппы + ", group"); element_group.Add(element_user.ADsPath); element_group.SetInfo(); Результат = Истина; Исключение Результат = Ложь; КонецПопытки; Возврат Результат; КонецФункции Функция УдалитьПользователяИзГруппыДомена (ИмяДомена, ИмяГруппы, ИмяПользователя) Экспорт Результат = Ложь; element_user = ""; element_group = ""; Попытка element_user = ПолучитьCOMОбъект("WinNT://" + ИмяДомена + "/" + ИмяПользователя + ", user"); element_group = ПолучитьCOMОбъект("WinNT://" + ИмяДомена + "/" + ИмяГруппы + ", group"); element_group.Remove(element_user.ADsPath); element_group.SetInfo(); Результат = Истина; Исключение Результат = Ложь; КонецПопытки; Возврат Результат; КонецФункции Процедура ЗаполнитьПочтовыеАдресаИзAD() Попытка conn = ПолучитьCOMОбъект("","ADODB.Connection"); conn.Provider = "ADSDSOObject"; conn.Open("Active Directory Provider"); Исключение Предупреждение("Ошибка подключения к Active Directory!"); Возврат; КонецПопытки; Для Каждого Стр из Таблица Цикл Если НЕ ПустаяСтрока(Стр.Логин) Тогда Попытка query = "SEL ECT ADsPath FR OM 'LDAP://DC="+СокрЛП(Домен.Код)+"' WHERE SAMAccountName='"+Стр.Логин+"'"; rs = conn.Execute(query); Пока НЕ rs.EOF() Цикл obj = ПолучитьCOMОбъект(rs.Fields(0).Value); Если obj.Class="user" Тогда Стр.НоваяПочта=СокрЛП(obj.EmailAddress); Если Стр.НоваяПочта<>Стр.СтараяПочта Тогда Стр.Установить=Истина; КонецЕсли; КонецЕсли; rs.MoveNext(); КонецЦикла; Исключение Сообщить("Ошибка получения почты для логина :"+Стр.Логин); КонецПопытки; КонецЕсли; КонецЦикла; conn.Close(); КонецПроцедуры Функция УдалитьПроцесс (ИмяКомпьютера, НазваниеПроцесса, Логин, Пароль) Экспорт Попытка COM = Новый COMОбъект ("WbemScripting.SWbemLocator"); Серв = COM.ConnectServer(СокрЛп(ИмяКомпьютера), "\root\cimv2", СокрЛП(Логин), СокрЛП(Пароль)); СписокПроцессов = Серв.execQuery("Sel ect * fr om Win32_Process Where Name = '"+СокрЛП(НазваниеПроцесса)+"'"); Для каждого item Из СписокПроцессов Цикл item.Terminate(); КонецЦикла; Исключение Возврат Ложь; КонецПопытки; Возврат Истина; КонецФункции