W jaki sposób mogę dodać adres e-mailowy do atrybutu proxyAddresses?
Skrypciarze odpowiadają na Wasze pytania
Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy. |
W jaki sposób mogę dodać adres e-mailowy do atrybutu proxyAddresses?
Cześć, Skrypciarzu! W jaki sposób można dodać adres e-mailowy do atrybutu proxyAddresses, nie zastępując przy tym istniejących już atrybutów?
-- Witek
Cześć, Witku. Osobom które nie są za dobrze zaznajomione z atrybutem proxyAddresses (należeli tu do niedawna i Skrypciarze) wyjaśniamy: jest atrybut dodawany do Active Directory przez Microsoft Exchange; jest to po prostu alias umożliwiający rozpoznanie użytkownika programu Exchange przez system pocztowy innego typu. Wywołanie echa adresów proxy danego użytkownika spowoduje wyświetlenie listy typu:
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
Myślicie sobie zapewne, że straszne mnóstwo danych jak na jeden atrybut, ale to dlatego, że jest to atrybut wielowartościowy – zawierający kilka wartości. Dlatego też dzisiejszy problem jest taki trudny. Załóżmy, że chcemy dodać do listy proxyAddresses nowy adres – kenmyer@northamerica.fabrikam.com. Nie chcemy przy tym kasować starych adresów.
Większość użytkowników stwierdzi, że żaden problem, że nic prostszego, niż zmodyfikować atrybut Active Directory, np. takim skryptem:
Set objUser = GetObject _
("LDAP://atl-dc-1/CN=Ken Myer,OU=Finance,DC=fabrikam,DC=com")
objUser.proxyAddresses = kenmyer@northamerica.fabrikam.com
objUser.SetInfo
I co się stanie przy następnym wywołaniu echa adresów proxy Kena Myera? Lista wyglądać będzie tak:
kenmyer@northamerica.fabrikam.com
No i masz: skasowaliśmy wszystkie stare adresy, zastępując je jednym nowym. No I o to chodziło.
W jaki sposób można zatem dodać jedną wartość na końcu atrybutu wielowartościowego? To oczywiste: wystarczy użyć metody 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 to metoda interfejsu ADSI służąca właśnie do pracy z atrybutami wielowartościowymi; metoda ta udostępnia cztery różne opcje:
Stała | Wartość | Opis |
ADS_PROPERTY_CLEAR | 1 | Zeruje wartość (lub wartości) podanego atrybutu. |
ADS_PROPERTY_UPDATE | 2 | Zamienia wartości atrybutu na podane. |
ADS_PROPERTY_APPEND | 3 | Dodaje nową wartość lub wartości do podanego atrybutu. |
ADS_PROPERTY_DELETE | 4 | Usuwa wartość (lub wartości) podanego atrybutu. |
Nie będziemy teraz zagłębiać się w opis tej metody; dodatkowe informacje znaleźć można w rozdziale poświęconym modyfikowaniu atrybutów wielowartościowych (j.ang.) w przewodniku Microsoft Windows 2000 Scripting Guide.
Wróćmy teraz do naszego skryptu. Chcemy dodać nową wartość do atrybutu proxyAddresses; w pierwszym wierszu skryptu definiujemy zatem stałą o nazwie ADS_PROPERTY_APPEND, ustalając jej wartość na 3:
Const ADS_PROPERTY_APPEND = 3
Łączymy się z kontem Kena Myera i wywołujemy metodę PutEx, podając trzy parametry:
- Stałą ADS_PROPERTY_APPEND, instruującą skrypt, że nowa wartość ma zostać dodana do starych.
- Nazwę atrybutu który chcemy zmodyfikować (proxyAddresses).
- Wartość którą chcemy dodać (czyli nowy adres proxy).
Zwróćcie uwagę, że mimo iż dodajemy tylko jedną wartość, musimy podać ją w postaci tablicy; nasz kod wyglądać będzie tak:
objUser.PutEx ADS_PROPERTY_APPEND, "proxyAddresses", _
Array("kenmyer@northamerica.fabrikam.com")
Tak z kolei wyglądać będzie echo adresów proxy Kena Myera:
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
Fajnie, nie?
Warto zaznaczyć, że nowy adres proxy pojawi się akurat na górze listy; nie jest tak łatwo ustalić kolejność poszczególnych wartości atrybutów wielowartościowych. To jednak nieważne – liczy się, że kenmyer@northamerica.fabrikam.com pojawia się w ogóle na liście.
Do początku strony