Python 使用pyad显示属性,没有获取logonHours
Python using pyad to display attributes, not getting logonHours
我一直在尝试让 logonHours
显示,同时在 Python 3.7 中使用 pyad
。当我去显示 logonHours 时,作为输出它给了我
memory at 0x0000000003049708
等等
不确定如何显示该数据。所有其他属性都正确显示。
from pyad import *
q = pyad.adsearch.ADQuery()
q.execute_query(
attributes= ["distinguishedName", "givenName", "userWorkstations","homeDirectory", "homeDrive", "logonHours"],
where_clause = "objectClass = '*'",
base_dn = "OU=Graphic Design Students, DC=someplace, DC=com"
)
adoutput = []
for row in q.get_results():
adoutput.append(row["distinguishedName"])
adoutput.append(row["givenName"])
adoutput.append(row["userWorkstations"])
adoutput.append(row["homeDirectory"])
adoutput.append(row["homeDrive"])
adoutput.append(row["logonHours"])
adoutput = [x for x in adoutput if x != None]
print(adoutput)
我的输出如下:
<memory at 0x0000000003049708>
<memory at 0x00000000030497C8>
<memory at 0x0000000003049888>
<memory at 0x0000000003049948>
<memory at 0x0000000003049A08>
<memory at 0x0000000003049AC8>
使用
row["logonHours"].tobytes()
获取字节值——您会看到与 ADSIEdit 显示的属性值相同的相当神秘的东西。
接下来的诀窍就是将其变成而非神秘的东西。关于如何在 https://social.technet.microsoft.com/Forums/exchange/en-US/545552d4-8daf-4dd8-8291-6f088f35c2a4/how-is-the-logon-hours-attribute-set-in-active-directory-windows-server-2008-r2-?forum=winserverDS
处对值进行编码有一个很好的解释
LogonHours 是一个 COM 对象。
以下是我处理 logonHours 属性的方式。在我的循环中,我检查数据类型:
import pyad.pyadutils
import win32com.client
if isinstance(v, win32com.client.CDispatch):
value = pyad.pyadutils.convert_datetime(v)
这给了我一个可以使用的日期时间对象。希望这对某人有所帮助。
使用@LisaJ 的回答中链接的the article,这里有一些您可以使用此属性的应用程序。希望这可以帮助某人。
#Convert the array to a list of which hours each day the account is logged in
weekList = []
for shift_1, shift_2, shift_3 in zip(*[iter(row["logonHours"].tobytes())]*3):
weekList.append(format(shift_1, '08b') + format(shift_2, '08b') + format(shift_3, '08b'))
#Total the hours for each day
totalHours = {}
for i, (shift_1, shift_2, shift_3) in enumerate(zip(*[iter(row["logonHours"].tobytes())]*3)):
totalHours[i] = len((format(shift_1, '08b') + format(shift_2, '08b') + format(shift_3, '08b')).replace("0", ""))
我一直在尝试让 logonHours
显示,同时在 Python 3.7 中使用 pyad
。当我去显示 logonHours 时,作为输出它给了我
memory at 0x0000000003049708
等等
不确定如何显示该数据。所有其他属性都正确显示。
from pyad import *
q = pyad.adsearch.ADQuery()
q.execute_query(
attributes= ["distinguishedName", "givenName", "userWorkstations","homeDirectory", "homeDrive", "logonHours"],
where_clause = "objectClass = '*'",
base_dn = "OU=Graphic Design Students, DC=someplace, DC=com"
)
adoutput = []
for row in q.get_results():
adoutput.append(row["distinguishedName"])
adoutput.append(row["givenName"])
adoutput.append(row["userWorkstations"])
adoutput.append(row["homeDirectory"])
adoutput.append(row["homeDrive"])
adoutput.append(row["logonHours"])
adoutput = [x for x in adoutput if x != None]
print(adoutput)
我的输出如下:
<memory at 0x0000000003049708>
<memory at 0x00000000030497C8>
<memory at 0x0000000003049888>
<memory at 0x0000000003049948>
<memory at 0x0000000003049A08>
<memory at 0x0000000003049AC8>
使用
row["logonHours"].tobytes()
获取字节值——您会看到与 ADSIEdit 显示的属性值相同的相当神秘的东西。
接下来的诀窍就是将其变成而非神秘的东西。关于如何在 https://social.technet.microsoft.com/Forums/exchange/en-US/545552d4-8daf-4dd8-8291-6f088f35c2a4/how-is-the-logon-hours-attribute-set-in-active-directory-windows-server-2008-r2-?forum=winserverDS
处对值进行编码有一个很好的解释LogonHours 是一个 COM 对象。
以下是我处理 logonHours 属性的方式。在我的循环中,我检查数据类型:
import pyad.pyadutils
import win32com.client
if isinstance(v, win32com.client.CDispatch):
value = pyad.pyadutils.convert_datetime(v)
这给了我一个可以使用的日期时间对象。希望这对某人有所帮助。
使用@LisaJ 的回答中链接的the article,这里有一些您可以使用此属性的应用程序。希望这可以帮助某人。
#Convert the array to a list of which hours each day the account is logged in
weekList = []
for shift_1, shift_2, shift_3 in zip(*[iter(row["logonHours"].tobytes())]*3):
weekList.append(format(shift_1, '08b') + format(shift_2, '08b') + format(shift_3, '08b'))
#Total the hours for each day
totalHours = {}
for i, (shift_1, shift_2, shift_3) in enumerate(zip(*[iter(row["logonHours"].tobytes())]*3)):
totalHours[i] = len((format(shift_1, '08b') + format(shift_2, '08b') + format(shift_3, '08b')).replace("0", ""))