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

2024-10-05 15:26:29 发布

您现在位置:Python中文网/ 问答频道 /正文

安装程序:在标准的Windows环境中,通过win32com.client.Dispatch('ADsNameSpaces')使用2.6风格的ActiveState Python,我手头有用户对象。显然,Get()Put()/SetInfo()方法是读取和写入对象属性的适当方法。我的方法是简单地将activedirectorycookbook中的示例改编为Python。我可以设置user对象的其他属性(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位高位部分和32位低位部分)。在


失败的尝试:

(一)

^{pr2}$

(二)

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)

(三)

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位整数!”在

从这里我要去哪里?在


Tags: 对象方法内容get属性put时间times