我已經在Python 2.7上測試了下面的內容,但主要想法應該是一樣的。
該MSDN documentation on msExchMailboxGuid注意它的語法是2.5.5.10,其中,如記錄in this table是一個八位組串。
這似乎在Python中表示爲一個無意義的unicode字符串。我們可以使用ord()
函數將其轉換爲一串十六進制字符,以將字符轉換爲整數。
這給了我們這樣的事情:
import win32com.client
ldap="SELECT cn, mail, msExchMailboxGuid From 'LDAP://OU=XXXXXXXX,DC=center,DC=intranet,DC=sinotrans'"
c = win32com.client.Dispatch('ADODB.Connection')
c.Open('Provider=ADsDSOObject')
rs,rc = c.Execute(ldap)
rs.MoveFirst()
while not rs.EOF:
for e in rs.fields:
if e.Name != 'msExchMailboxGuid':
print('{}: {}'.format(e.Name, e.Value))
else:
print('{}: {}'.format(e.Name, ''.join(['{:x}'.format(ord(x)) for x in e.Value]))
print()
rs.MoveNext()
這應該輸出msExchMailboxGuid
作爲十六進制字符串。爲了得到顯示爲一個很好的格式化的GUID字符串msExchMailboxGuid
值,我們可以端口從this blog post的HexGuidToGuidStr
功能如下:
def hex_to_guid(s):
return '-'.join([
''.join(s[8-2*x:10-2*x] for x in range(1, 5)),
''.join(s[12-2*x:14-2*x] for x in range(1, 3)),
''.join(s[16-2*x:18-2*x] for x in range(1, 3)),
s[16:20],
s[20:]
])
和風了:
import win32com.client
ldap="SELECT cn, mail, msExchMailboxGuid From 'LDAP://OU=XXXXXXXX,DC=center,DC=intranet,DC=sinotrans'"
c = win32com.client.Dispatch('ADODB.Connection')
c.Open('Provider=ADsDSOObject')
rs,rc = c.Execute(ldap)
rs.MoveFirst()
while not rs.EOF:
for e in rs.fields:
if e.Name != 'msExchMailboxGuid':
print('{}: {}'.format(e.Name, e.Value))
else:
if e.Value is not None:
print('{}: {}'.format(e.Name, hex_to_guid(''.join(['{:x}'.format(ord(x)) for x in e.Value]))))
print()
rs.MoveNext()
說了這麼多,該msExchMailboxGuid
僅僅因爲沒有與所討論的用戶相關的值而可能顯示爲空字符串。特別是如果您使用我剛剛佈置的代碼,則需要專門處理該案例。
謝謝你的代碼。我認爲有一個)錯過了第二張照片。 但它不起作用,我得到以下消息: print('{}:{}'。format(e.Name,''.join(['{:x}'.format(ord(x ))for e.Value])))012) TypeError:'NoneType'對象不可迭代 – user1430185
@ user1430185:我編輯了上面的代碼。但是,請注意,如果結果爲「無」,則這往往意味着該帳戶沒有「msExchMailboxGuid」值,這很可能...我爲上面的情況添加了一個檢查。 – ig0774
太棒了!我在這裏呆了幾個小時。謝謝。 – user1430185