|
Интеграция/Получение данных из Active Directory в 1С | ☑ | ||
---|---|---|---|---|
0
mao
19.09.19
✎
06:04
|
Не могу получить два атрибута (pwdlastset,lastlogon) из AD, возвращает COMОбъект.
Оба атрибута имеют тип Integer8, 64-битное значение, представляющее дату в UTC - количество интервалов в 100 наносекунд, начиная с 12:00 01.01.1601. Подскажите, пожалуйста, как вытащить эти поля. |
|||
1
ppa32
19.09.19
✎
07:30
|
А можно код, которым ты это делаешь?
|
|||
2
mao
19.09.19
✎
07:46
|
Фильтр = "(&(objectCategory=person)(objectClass=user)(sn="+AD_User_sAMAccountName+"))";
КомандаАДО = Новый COMОбъект("ADODB.Command"); СоединениеАДО = Новый COMОбъект("ADODB.Connection"); СоединениеАДО.Provider = "ADSDSOObject"; Попытка СоединениеАДО.Open("Active Directory Provider"); Исключение Сообщить("Ошибка при открытии Active Directory Provider: " + ОписаниеОшибки()); Возврат; КонецПопытки; КомандаАДО.ActiveConnection = СоединениеАДО; Попытка RootDSE = ПолучитьCOMОбъект("LDAP://RootDSE"); Исключение Сообщить("Ошибка ПолучитьCOMОбъект(LDAP://RootDSE): " + ОписаниеОшибки()); Возврат; КонецПопытки; ТекущийДомен = RootDSE.Get("defaultNamingContext"); Попытка ОбъектТекущегоДомена = ПолучитьCOMОбъект("LDAP://" + ТекущийДомен); Исключение Сообщить("Ошибка ПолучитьCOMОбъект "+"LDAP://" + ТекущийДомен+": " + ОписаниеОшибки()); Возврат; КонецПопытки; КомандаАДО.CommandText = "<LDAP://" +ТекущийДомен + ">;" +Фильтр+ ";displayName,Description,title,department,company,EmployeeID,badPwdCount,physicalDeliveryOfficeName,telephoneNumber,mail,sAMAccountName,LastLogon,pwdlastset,useraccountcontrol,userworkstations;subtree"; КомандаАДО.Properties("Page Size").Value = 100; КомандаАДО.Properties("Timeout").Value = 30; КомандаАДО.Properties("Cache Results").Value = Ложь; Попытка ВыборкаАДО = КомандаАДО.Execute(); Исключение Сообщить("Ошибка Execute(): " + ОписаниеОшибки()); Возврат; КонецПопытки; Пока НЕ ВыборкаАДО.EOF Цикл Сообщить("ФИО: " + СокрЛП(ВыборкаАДО.Fields("displayName").Value)); Сообщить("Должность: " + СокрЛП(ВыборкаАДО.Fields("title").Value)); Сообщить("Подразделение: " + СокрЛП(ВыборкаАДО.Fields("department").Value)); Сообщить("Организация: " + СокрЛП(ВыборкаАДО.Fields("company").Value)); Сообщить("Отпуск: " + СокрЛП(ВыборкаАДО.Fields("EmployeeID").Value)); Сообщить("Кабинет: " + СокрЛП(ВыборкаАДО.Fields("physicalDeliveryOfficeName").Value)); Сообщить("Телефон: " + СокрЛП(ВыборкаАДО.Fields("telephoneNumber").Value)); Сообщить("Время последнего входа: " + ВыборкаАДО.Fields("lastlogon").Value); Сообщить("Дата смены пароля: " + СокрЛП(ВыборкаАДО.Fields("pwdlastset").Value)); ВыборкаАДО.MoveNext(); КонецЦикла; ВыборкаАДО.Close(); СоединениеАДО.Close(); |
|||
3
ppa32
19.09.19
✎
09:01
|
Попробуй заюзать метод ConvertLargeIntegerToInt64()
Вот этот вот: https://docs.microsoft.com/ru-ru/dotnet/api/microsoft.powershell.adaptercodemethods.convertlargeintegertoint64?view=powershellsdk-1.1.0&viewFallbackFrom=pscore-6.0.0 |
|||
4
mao
20.09.19
✎
08:13
|
РЕШЕНИЕ НАЙДЕНО!
Функция TimeZoneBias() objWMIService = ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2"); colTimeZone = objWMIService.ExecQuery("Select * from Win32_TimeZone"); Для каждого objTimeZone Из colTimeZone Цикл TimeZoneBias = objTimeZone.Bias; Возврат TimeZoneBias; КонецЦикла; objWMIService = ""; colTimeZone = ""; КонецФункции _______ intBias = TimeZoneBias(); __________ objDate = ВыборкаАДО.Fields("pwdlastset").Value; dtmDate = ((((objDate.Highpart * pow(2,32)) + objDate.LowPart)/(600000000 - intBias))/1440) ; dtmDate = Дата(1601,1,1)+dtmDate*60*60*24; Сообщить(dtmDate); ________ Получаю необходимую дату. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |