kilqkrotnie miałem problem – przychodzi ktoś i żąda żeby zrobić coś z kontem, którego email to …. chodzi o to, że czasem był to email, czasem alias – generalnie nie ma standardowego searcha, który potrafi to zrobić. otóż i skrypcik:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<span style="color: #0000FF;">if</span><span style="color: #000000;">(</span><span style="color: #800080;">$args</span><span style="color: #000000;">.count </span><span style="color: #008080;">-ne</span><span style="color: #000000;"> </span><span style="color: #000000;">1</span><span style="color: #000000;">) { echo podaj parametr </span><span style="color: #0000FF;">return</span><span style="color: #000000;"> } </span><span style="color: #800080;">$searcher</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> New</span><span style="color: #000000;">-</span><span style="color: #000000;">Object DirectoryServices.DirectorySearcher([ADSI]</span><span style="color: #800000;">""</span><span style="color: #000000;">) </span><span style="color: #800080;">$searcher</span><span style="color: #000000;">.</span><span style="color: #0000FF;">filter</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">"</span><span style="color: #800000;">(|(objectClass=user)(objectClass=group))</span><span style="color: #800000;">"</span><span style="color: #000000;"> </span><span style="color: #800080;">$searcher</span><span style="color: #000000;">.searchscope</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">Subtree</span><span style="color: #800000;">"</span><span style="color: #000000;"> </span><span style="color: #800080;">$searcher</span><span style="color: #000000;">.PropertiesToLoad.add(</span><span style="color: #800000;">"</span><span style="color: #800000;">proxyaddresses</span><span style="color: #800000;">"</span><span style="color: #000000;">) </span><span style="color: #800080;">$searcher</span><span style="color: #000000;">.PropertiesToLoad.add(</span><span style="color: #800000;">"</span><span style="color: #800000;">mailnickname</span><span style="color: #800000;">"</span><span style="color: #000000;">) </span><span style="color: #800080;">$searcher</span><span style="color: #000000;">.PropertiesToLoad.add(</span><span style="color: #800000;">"</span><span style="color: #800000;">mail</span><span style="color: #800000;">"</span><span style="color: #000000;">) </span><span style="color: #800080;">$searcher</span><span style="color: #000000;">.PropertiesToLoad.add(</span><span style="color: #800000;">"</span><span style="color: #800000;">samaccountname</span><span style="color: #800000;">"</span><span style="color: #000000;">) </span><span style="color: #800080;">$results</span><span style="color: #000000;">=</span><span style="color: #800080;">$searcher</span><span style="color: #000000;">.findall() </span><span style="color: #0000FF;">foreach</span><span style="color: #000000;">(</span><span style="color: #800080;">$r</span><span style="color: #000000;"> </span><span style="color: #0000FF;">in</span><span style="color: #000000;"> </span><span style="color: #800080;">$results</span><span style="color: #000000;">) { </span><span style="color: #800080;">$prop</span><span style="color: #000000;">=</span><span style="color: #800080;">$r</span><span style="color: #000000;">.properties </span><span style="color: #0000FF;">if</span><span style="color: #000000;">(</span><span style="color: #800080;">$prop</span><span style="color: #000000;">.proxyaddresses) { </span><span style="color: #800080;">$pa</span><span style="color: #000000;">=</span><span style="color: #000000;"> ([string](</span><span style="color: #800080;">$prop</span><span style="color: #000000;">.proxyaddresses)).tolower() </span><span style="color: #0000FF;">if</span><span style="color: #000000;">(</span><span style="color: #800080;">$pa</span><span style="color: #000000;">.contains(</span><span style="color: #800080;">$args</span><span style="color: #000000;">[</span><span style="color: #000000;">0</span><span style="color: #000000;">]) ) { echo </span><span style="color: #800000;">"</span><span style="color: #800000;">$($prop.samaccountname) -> $($prop.proxyaddresses)</span><span style="color: #800000;">"</span><span style="color: #000000;"> } } </span><span style="color: #0000FF;">if</span><span style="color: #000000;">(</span><span style="color: #800080;">$prop</span><span style="color: #000000;">.mail) { </span><span style="color: #800080;">$pa</span><span style="color: #000000;">=</span><span style="color: #000000;"> ([string](</span><span style="color: #800080;">$prop</span><span style="color: #000000;">.mail)).tolower() </span><span style="color: #0000FF;">if</span><span style="color: #000000;">(</span><span style="color: #800080;">$pa</span><span style="color: #000000;">.contains(</span><span style="color: #800080;">$args</span><span style="color: #000000;">[</span><span style="color: #000000;">0</span><span style="color: #000000;">]) ) { echo </span><span style="color: #800000;">"</span><span style="color: #800000;">$($prop.samaccountname) -> $($prop.mail)</span><span style="color: #800000;">"</span><span style="color: #000000;"> } } </span><span style="color: #0000FF;">if</span><span style="color: #000000;">(</span><span style="color: #800080;">$prop</span><span style="color: #000000;">.mailnickname) { </span><span style="color: #800080;">$pa</span><span style="color: #000000;">=</span><span style="color: #000000;"> ([string](</span><span style="color: #800080;">$prop</span><span style="color: #000000;">.mailnickname)).tolower() </span><span style="color: #0000FF;">if</span><span style="color: #000000;">(</span><span style="color: #800080;">$pa</span><span style="color: #000000;">.contains(</span><span style="color: #800080;">$args</span><span style="color: #000000;">[</span><span style="color: #000000;">0</span><span style="color: #000000;">]) ) { echo </span><span style="color: #800000;">"</span><span style="color: #800000;">$($prop.samaccountname) -> $($prop.mailnickname)</span><span style="color: #800000;">"</span><span style="color: #000000;"> } } } echo </span><span style="color: #800000;">"</span><span style="color: #800000;">done.</span><span style="color: #800000;">"</span> |
pozostaje jeszcze jeden problem… foldery publiczne, które też mogą mieć email…
eN.
Hmm, a po groupType nie da sie nic zrobic?
A jak masz katalog na AD nizszym niz 2008 to czeszesz tym zapytaniem po katalogu bez indeksu :) – takie tam zboczenie :)
BTW – a zapytanie z ANR by nie wystarczylo: http://msdn.microsoft.com/en-us/library/cc223243(PROT.10).aspx??
gibon: wyglada smacznie. bede musial potestowac.
tak na prawde to i tak wszystko dupa – usiedlismy z domelem i zaczelismy zastanawiac sie co jeszcze moze miec addr email i tych obiektow jest troche – mi. np przydaloby sie dodanie wyszukiwania po folderach publicznych, co z innymi obiektami np. w SCCM/SCOM?
jak sie nie ma dostepu do traceingu od strony serwera to nie latwo wyszukac gdzie zarejestrowany jest email ):