在Python中,如何在Active Directory中的用户对象上设置过期日期?

时间:2010-02-10 22:56:47

标签: python active-directory

设置:我使用2.6版本的ActiveState Python在标准Windows环境中通过win32com.client.Dispatch('ADsNameSpaces')掌握了用户对象。显然,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 Epoch时间,并从那里转换为64位Microsoft时间格式(自1601年1月1日起100纳秒间隔;存储为32位HighPart和32 -bit 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

导出的“时间”对象及其中的部分(HighPart,LowPart)的检查尝试失败:

1)dir()对我检查对象的尝试没有帮助,没有任何看起来不寻常的东西。

2)有趣的“Python内省指南”文章(http://www.ibm.com/developerworks/library/l-pyint.html)没有提供任何更多的见解。

3)inspect模块中有很多令人困惑但看起来非常通用的输出;什么都没说“嗨,把32位整数放在我身上!”

我从哪里开始?

1 个答案:

答案 0 :(得分:2)

之前我从未使用过ADsNameSpaces COM对象。但是看一下例子Here,我想你可能想尝试类似的东西:

objUser.AccountExpirationDate(date)