Share via


嗨,Scripting Guy!

嗨,Scripting Guy!

歡迎使用 TechNet 專欄,Microsoft Scripting Guys 會在此為您解答有關系統管理指令碼的常見問題。您有關於系統管理指令碼方面的問題嗎?請將電子郵件傳送到 scripter@microsoft.com。我們無法保證能夠逐一回答每個問題,不過我們會盡力而為。

今天的問題:如何將電子郵件地址加入 proxyAddresses 屬性中?


如何將電子郵件地址加入 proxyAddresses 屬性中?

嗨,Scripting Guy!我要如何在不覆寫所有現有屬性的情況下,將電子郵件地址加入 proxyAddresses 屬性中?

-- DH

DH,您好。如果您還不太熟悉 proxyAddresses 屬性 (唉!Scripting Guys 也不熟),proxyAddresses 是 Microsoft Exchange 加入 Active Directory 的屬性,它只是一個別名,能讓 Exchange 以外的郵件系統辨識 Exchange 使用者。在回應指定使用者的 Proxy 位址時,應該會看到以下內容:
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 確實顯示在清單中某處就好了。


如需詳細資訊

查看嗨,Scripting Guy!- 過往文件

 

回到頁首 回到頁首