В Python, как установить дату истечения срока действия для объекта пользователя в Active Directory? - PullRequest
2 голосов
/ 11 февраля 2010

Настройка: У меня под рукой пользовательский объект, через win32com.client.Dispatch('ADsNameSpaces'), в стандартной среде Windows, с использованием ActiveState Python версии 2.6. По-видимому, методы Get() и Put() / SetInfo() являются подходящими способами для чтения и записи свойств объекта. Мой подход состоял в том, чтобы просто адаптировать примеры из Active Directory Cookbook для Python. Я могу установить другие свойства (password, sn, givenName и т. Д.) Объекта пользователя и в противном случае активировать учетную запись, добавить ее в группы, но установка даты истечения срока действия кажется проблематичной.

В VBScript (я знаю, я знаю, это то, что в книге) вы можете сделать:

objUser.AccountExpirationDate = '12/31/2010'
objUser.SetInfo

Я также знаю, что есть отдельное свойство accountExpires. Я могу выполнить times = objUser.Get('accountExpires') и получить объект с .HighPart и .LowPart, поскольку я знаю, что информация хранится внутри, поэтому я чувствую, что на правильном пути.

Кроме того, я написал функции, которые преобразуют даты, читаемые человеком, во время эпохи Unix и оттуда в 64-битный формат времени Microsoft (интервалы в 100 наносекунд с 1 января 1601 года; сохраняются как 32-битные HighPart и 32 -бит LowPart), если это требуется.


Неудачные попытки:

1)

objUser.AcccountExpirationDate = '03/20/2010'
>>AttributeError: Property '<unknown>.AcccountExpirationDate' can not be set.

2)

objUser.Put('AccountExpirationDate', '03/20/2010')
>>  File "<COMObject <unknown>>", line 2, in SetInfo
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, u'Active Directory', u'The specified directory service attribute or value does not exist.\r\n', None, 0, -2147016694), None)

3)

times = objUser.Get('accountExpires')
print 'highpart: ' + str(times.HighPart)
# "highpart" variable computed elsewhere
times.Put('HighPart', highpart)
>>AttributeError: <unknown>.Put

Неудачные попытки проверки для производного объекта "times" и его частей (HighPart, LowPart):

1) dir() не помог мне в попытках осмотреть объект, не выдав ничего необычного.

2) Статья "Путеводитель по интроспекции Python" (http://www.ibm.com/developerworks/library/l-pyint.html),, которая интересна, больше не дает понимания.

3) У меня много недоумения, но очень общий вид вывода из модуля inspect; ничего не говорит "Привет, вставь в меня 32-битное целое число!"

Куда мне идти отсюда?

1 Ответ

2 голосов
/ 10 марта 2012

Ну, я никогда раньше не использовал COM-объекты ADsNameSpaces. Но, глядя на примеры Здесь , я думаю, вы можете попробовать что-то вроде:

objUser.AccountExpirationDate(date)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...