Полезные процедуры работы с AD

17.09.09

Разработка - Универсальные функции

Надоели просить меня запостить рабочие модули работы с 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();  
		КонецЦикла; 
	Исключение  
		Возврат Ложь; 
	КонецПопытки;  
	
	Возврат Истина;
КонецФункции
		

См. также

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

21.05.2024    20253    dimanich70    81    

145

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    4101    3    John_d    11    

57

Универсальные функции Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    18222    atdonya    24    

57

Универсальные функции Программист Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    5511    ke.92@mail.ru    16    

65

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    14780    YA_418728146    7    

166

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    3596    57    progmaster    8    

4

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    18502    171    sapervodichka    112    

135
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. coder1cv8 3477 15.09.09 13:44 Сейчас в теме
Ничего нового для себя не увидел :)

ЗЫ: Мой вариант получения почты 1С-ного пользователя:

Функция ПолучитьMailПоПользователю(СсылкаПользователь)
Адрес="";
ПользовательИБ=ПользователиИнформационнойБазы.НайтиПоИмени(СокрЛП(СсылкаПользователь.Код));
Если ПользовательИБ<>Неопределено Тогда
Если ПользовательИБ.АутентификацияОС Тогда
ПользовательОС=СтрЗаменить(ПользовательИБ.ПользовательОС,"\","/");
Попытка
ЮзерАД=ПолучитьCOMОбъект("WinNT:"+ПользовательОС+",user");
LDAP=ПолучитьCOMОбъект("LDAP://CN="+ЮзерАД.FullName+",OU=Common Users,OU=Regular Users,DC="+Домен+",DC=local");
Адрес=LDAP.Mail;
Исключение
КонецПопытки;
КонецЕсли;
КонецЕсли;
Возврат Адрес;
КонецФункции
3. vde69 925 15.09.09 13:52 Сейчас в теме
(1) я не претендую на гениальность, просто будет ссылка куда удобно тыкать ламеров :)

а вообще у меня есть идея сделать полезный сборник и интегрировать его в конфигуратор, не знаю может и сделаю :)
AndrewVVS; DrSender; JohnyDeath; coder1cv8; +4 Ответить
5. JohnyDeath 302 15.09.09 14:16 Сейчас в теме
(3) Лучше, наверное, не конфу, а какой-нить chm.
Также удаленный ребут не помешал бы, а то каждый раз ищу в торопях )
8. vde69 925 15.09.09 14:25 Сейчас в теме
(5) в САБЖЕ есть удаленное убитие процесса, что практическое значение имеет такоеже :)

(4) я сборник хочу сделать на DBF-е с внешней DLL-ой которая бы внедрялась в память конфигуратора, и вызывалась по горячей клавише, кроме того я хочу туда внедрить механизм компановки общих модулей (с корректировкой всех вызовов), и еще подпись хешем всех функций и на этом основании проверку версий функций в конфигурации, и еще подпись авторами своих функций, и еще блекджет со шлюхами :)
16. echo77 1906 10.01.10 11:35 Сейчас в теме
(5) Удаленный ребут - это:
Код
ЗапуститьПриложение("shutdown /m "+ИмяМашины+" /r /t 0",,);
Показать полностью
19. ZERO_ 63 10.01.10 14:56 Сейчас в теме
(16)
Ну, можно еще, убить lsass.exe 8-)
2. JohnyDeath 302 15.09.09 13:46 Сейчас в теме
+
еще б "ВыполнитьКоманду" на удаленном компе.
4. coder1cv8 3477 15.09.09 14:04 Сейчас в теме
(2)+1
Добавил бы хоть пример с Create() процесса через WMI на удаленной машине! :)
(3) да, хороший сборник бы не помешал... А то одна фиксиновская библиотека была, на которую и смотреть-то страшно, ни то что использовать! ) Но я слышал 1С сподобилась наконец-то создать свою "библиотеку функций" в виде конфигурации...
6. Трактор 1254 15.09.09 14:18 Сейчас в теме
(4) >> слышал 1С сподобилась наконец-то создать свою "библиотеку функций" в виде конфигурации
Называется "Библиотека стандартных подсистем и методики разработки прикладных решений " Но я её не видел.
7. JohnyDeath 302 15.09.09 14:19 Сейчас в теме
ПолуОФФ.
А как вообще люди смотрят на PowerShell? С PowerGUI http://www.powergui.org/index.jspa (и набором скриптов и библиотек) вообще хорошо смотрится
9. coder1cv8 3477 16.09.09 12:07 Сейчас в теме
(7) Вещь интересная, но лично я не понимаю преимуществ перед тем же AutoIt... Ну да PowerShell работает с объектами .Net, но AutoIt зато компилируется в exe-шники!
Вот кроме этой интеграции с .Net и похвастаться то нечем! Простой доступ к WMI? Так и через COM там ничего сложного нету... К тому же любителям командной строки, можно wmic для этих целей юзать...
В общем, для себя, как человека не знакомого с Net Framework, не вижу задач в которых PowerShell лучше др. инструментов...
ЗЫ: IDE для AutoIt нет нормальной, это грустно...
11. JohnyDeath 302 17.09.09 13:01 Сейчас в теме
(9) PowerShell в новых виндах стоит по умолчанию, поэтому не надо устанавливать сторонние программки. Ну и то, что PowerShell не компилирует exe - не большой минус ИМХО
12. coder1cv8 3477 17.09.09 15:32 Сейчас в теме
(11) У меня вот ХР SP2, нужно установить целых две программы: сам PowerShell и Net Framework...
Но вообще-то я PowerShell не ругаю, хочу заметить! Наверняка удобный инструмент для тех кто активно использует Net Framework... Ну и мелкие фишки понравились, типа вывода результата в html...
10. vde69 925 16.09.09 12:25 Сейчас в теме
мне понравилось StarUML жаль его не прикрутить к 1с
13. sound 536 21.09.09 23:21 Сейчас в теме
еще туда же про искченджь (прости господи) надо функций понапихать
14. Арчибальд 2709 01.10.09 16:53 Сейчас в теме
Попытаюсь ответить на вапрос, заданный у конкурента.
1. Выложено в выходные. Пока народ ко вторнику проснулся...
2. РАБОТАТЬ с АД мало кому нужно. А структуру знать хочется...
3. Букав поменьше бы надо...
4. Народ изголодался, пока сайт стоял.
15. Istur 1474 10.01.10 08:45 Сейчас в теме
Если кого тема интересует более широко, то читайте книгу Андрея Михайлова "Системное программирование".
18. Моха 10.01.10 14:03 Сейчас в теме
(15) Блин :) , не заметил твой пост :).
17. Моха 10.01.10 14:03 Сейчас в теме
В тему.
Есть еще книжка Михайлова по системному программированию в 1С. Я ее мельком смотрел только. Но по ходу и туда можно тыкать :).
20. Тихоход 01.10.14 17:29 Сейчас в теме
Домен.Код подскажите пожалуйста как получить?
21. M_Volkov 5 04.11.20 16:57 Сейчас в теме
Статья замечательная. Я 1С-ник, в AD не волоку. Но здесь не хватает функции ПолучитьСписокПользователейДомена(СокрЛП(ИмяДомена)) без групп. В 1С у пользователя в Аутентификация ОС прописано только \\ИмяДомена\ИмяПользователяОС, и запись эта может стать устаревшей. Например, имена домена или пользователя изменились. Хотелось бы это проверять при запуске пользователя.
Если не трудно, напишите функцию ПолучитьСписокПользователейДомена(СокрЛП(ИмяДомена))
22. M_Volkov 5 04.11.20 18:59 Сейчас в теме
У (1) заметил:
ПользовательОС=СтрЗаменить(ПользовательИБ.ПользовательОС,"\","/");
Попытка
ЮзерАД=ПолучитьCOMОбъект("WinNT:"+ПользовательОС+",user");
Если ЮзерАД получен, то ПользовательОС с \\ИмяДомена\ИмяПользователяОС существует, иначе (Исключение) нет.
Оставьте свое сообщение