NUMERIC:4257050743
sip:kenmyer@fabrikam.com
X500:/o=fabrikam/ou=APPS-WGA/cn=Xenix_Users/cn=kenmyer
X500:/o=fabrikam/ou=First Administrative Group/cn=Recipients/cn=kenmyer
x400:c=US;a=MCI;p=fab;o=northamerica;s=Myer;g=Ken;
X500:/O=fabrikam/OU=northamerica/cn=Recipients/cn=kenmyer
X400:c=US;a=finance;p=fabrikam;o=fabrikam;s=Myer;g=Ken;
x500:/o=fabrikam/ou=northamerica/cn=Recipients/cn=556899
smtp:kenmyer@fabrikam.com
SMTP:kenmyer@finance.fabrikam.com
您要是想:「哇!小小一個屬性也有這麼多東西啊!」,呃,這是因為 proxyAddresses 不巧剛好是多重值的屬性,這種屬性可以包含不止一個值。因此這個問題才會這麼棘手。假設我們要加入新的 Proxy 位址 (kenmyer@northamerica.fabrikam.com) 到 proxyAddresses 的清單中。我們不想刪除原有的位址,只是想另外加入一個位址。
那有什麼問題,畢竟,誰都知道怎麼修改 Active Directory 屬性,不是嗎?於是您試著撰寫如下的指令碼:
Set objUser = GetObject _
("LDAP://atl-dc-1/CN=Ken Myer,OU=Finance,DC=fabrikam,DC=com")
objUser.proxyAddresses = kenmyer@northamerica.fabrikam.com
objUser.SetInfo
想不到吧,下次當您回應 Ken Myer 的 Proxy 位址時,將會出現下列結果:
kenmyer@northamerica.fabrikam.com
糟糕:我們把所有舊的 Proxy 位址刪掉了,全都被新位址取代了。這實在不是我們的本意。
那麼我們要怎麼做才能直接把額外的值貼到多重值屬性的尾端呢?哎呀,只要使用 PutEx 方法就好了:
Const ADS_PROPERTY_APPEND = 3
Set objUser = GetObject _
("LDAP://cn=KenMyer,ou=Finance,dc=fabrikam,dc=com")
objUser.PutEx ADS_PROPERTY_APPEND, "proxyAddresses", _
Array("kenmyer@northamerica.fabrikam.com ")
PutEx 是專為使用多重值屬性而設計的 ADSI 方法,事實上,PutEx 提供四種不同的選項來處理多重值屬性:
常數 |
值 |
說明 |
DS_PROPERTY_CLEAR |
1 |
清除指定屬性的值。 |
ADS_PROPERTY_UPDATE |
2 |
使用新值取代指定屬性中的值。 |
ADS_PROPERTY_APPEND |
3 |
附加新值到指定屬性。 |
ADS_PROPERTY_DELETE |
4 |
從指定屬性刪除值。 |
我們就不費力解釋 PutEx 的運作細節,如需其他詳細資訊,您可以閱讀《Microsoft Windows 2000 Scripting Guide》中的<Modifying Multivalued Attributes>(英文) 一節。
現在回頭談我們的指令碼。我們想要附加新值到 proxyAddresses,因此在指令碼第一行定義稱為 ADS_PROPERTY_APPEND 的常數,而且將值設為 3:
Const ADS_PROPERTY_APPEND = 3
我們繫結到 Ken Myer 使用者帳戶,然後呼叫 PutEx 方法並傳遞三個參數:
- ADS_PROPERTY_APPEND 常數,這會告訴指令碼附加新值到任何現有的值。
- 要處理的屬性名稱 (proxyAddresses)。
- 要附加的值 (即新的 Proxy 位址)。
請注意,即使只加入單一的值,仍須以陣列傳遞該值,因此實際的程式碼看起來如下:
objUser.PutEx ADS_PROPERTY_APPEND, "proxyAddresses", _
Array("kenmyer@northamerica.fabrikam.com")
當我們呼叫 Ken Myer 的 Proxy 位址時,會傳回什麼呢:
kenmyer@northamerica.fabrikam.com
NUMERIC:4257050743
sip:kenmyer@fabrikam.com
X500:/o=fabrikam/ou=APPS-WGA/cn=Xenix_Users/cn=kenmyer
X500:/o=fabrikam/ou=First Administrative Group/cn=Recipients/cn=kenmyer
x400:c=US;a=MCI;p=fab;o=northamerica;s=Myer;g=Ken;
X500:/O=fabrikam/OU=northamerica/cn=Recipients/cn=kenmyer
X400:c=US;a=finance;p=fabrikam;o=fabrikam;s=Myer;g=Ken;
x500:/o=fabrikam/ou=northamerica/cn=Recipients/cn=556899
smtp:kenmyer@fabrikam.com
SMTP:kenmyer@finance.fabrikam.com
怎樣,很酷吧!
附帶一提,新的 Proxy 位址不見得會顯示在位址清單的最前面,就多重值屬性而言,個別屬性的順序並不一定。不過這也無所謂,只要 kenmyer@northamerica.fabrikam.com 確實顯示在清單中某處就好了。 |