ADS_PROPERTY_OPERATION_ENUM – sprostowanie

jakis czas temu pisalem o hurtowym dodawaniu do grupy. niestety po testach okazuje sie, ze troche sie mylilem, wiec sprosotwanie:

w opisie dostepnych parametrow dla rodzaju operacji przy wykonywaniu putEx dla obiektu AD, znalezc mozna 4 parametry:
ADS_PROPERTY_CLEAR = 1,
ADS_PROPERTY_UPDATE = 2
ADS_PROPERTY_APPEND = 3
ADS_PROPERTY_DELETE = 4

krotki opis baj mła:
DELETE jest jedyna opcja na usuniecie parametru obiektu w AD. generalnie putEx jest uzywany dla modyfikacji parmetrow bedacych tablica [array-type], jednak jesli sie chce usunac parametr [a to duza roznica pomiedzy wstawieniem do parametru null, „” oraz jego usunieciem – kazda z 3 operacji to inna operacja], nalezy uzyc putEx z wartoscia 4 – dla dowolnego typu parametru.

CLEAR – tu nie bede komentowal bo nie testowalem. wedle opisu: „Instructs the directory service to remove all the property value(s) from the object” wynikalo by, ze obiekt jest 'resetowany’. co ciekawe – caly obiekt a nie pojedyncza wartosc. to troche dziwne, wyjasnienia nie znam.

UPDATE – wymienia wartosci na nowe. i to jest wlasnie blad, ktory poplenilem we wczesniejszym opisie. jak to dziala, na przykladzie czlonkow grupy:
parametr 'members’ obiektu grupa zawiera tablice ADsPath, gdzie poszczegolne wartsoci to sciezka LDAP uzytkownika/grupy np:

array("LDAP://cn=user1,dc=domain,dc=com","LDAP://cn=user2,dc=domain,dc=com")

jesli zrobie putEx z parametrem UPDATE i wstawie tam inne wartosci:

oGrp.putEx ADS_PROPERTY_UPDATE, "member", array("LDAP://cn=user1,dc=domain,dc=com","LDAP://cn=anotheruser,dc=domain,dc=com")

to nowymi czlonkami beda userzy z tej ostatniej operacji – czyli wypadnie user2. zaleta taka, ze nie wywali bledu z powodu tego, ze user1 byl juz wczesniej czlonkiem.

APPEND – dodaje nowe wartosci. tutaj problem polega na tym, ze jesli zrobi sie append, dla przykladu takiego jak powyzej, skrypt wygeneruje blad, ze taki user juz jest, i nie doda nikogo, nawet jesli w tablicy jest 23 innych userow.

reasumujac, zeby dodac wielu userow mozna:
– dodawac ich jeden po drugim
– najpierw zczytac obecne czlonkowstwo, zsumowac z tymi, ktorych sie chce dodac, i dopiero ta sume pchnac z parametrem UPDATE

hurtowe dodawanie czlonkow do grupy

czlonkow do grupy mozna dodac pojedynczo:
oGrp.add(„LDAP://CN=user,CN=users,[…]”)
albo hurtowo za pomoca putEx:

oGRP.PutEx ADS_PROPERTY_VALUE, "member", ARRAY_OF_USERS

ADS_PROPERTY_VALUE to wartosc okreslajaca zachowanie metody putEx – dodaj, usun, update, wyczysc. dzieki putEx m.in. mozna usunac wartosc. w przypadq dodawania do grupy istotne sa dwa szczegoly:
– uzycie ADS_PROPERTY_APPEND spowoduje wywalenie sie jesli w grupie jest juz czlonek, ktorego probujemy dodac. w efekcie nikt nie zostanie dodany. trzeba uzyc ADS_PROPERTY_UPDATE, ktory zachowuje sie w pozadany sposob – dodaje tych co moze.
– ARRAY_OF_USERS musi zawierac tablice Distinguished Names uzytkownikow. jest to dziwne bo przy oGrp.add podaje sie ADsPath czyli dla putEx tablica bedzie skladac sie z np. „CN=user,CN=users,DC=domena,DC=com” a przy 'add’ poprawna wartoscia bedzie „LDAP://CN=user,CN=users,DC=domena,DC=com”

doawanie hurtowe ma drobna wade – nie ma mozliwosci outputu do zdebudowania, pozwalajacego okreslic czy wszystkie obiekty zostaly dodane [i ktore nie]. po prostu 'succes’ lub 'error’. jednak ze wzgledu na wydajnosc – jest to metoda najbardziej efektywna, zwlaszcza jesli dodaje sie kilka set/kilka tysiecy membersow

trywialne? huh.. niemozliwe

wydawalo by sie, ze sprawa prosta – zalozyc ze skryptu grupe domenowa lokalna. konkretnie w domenie NT4.o, chociaz to znaczenia nie ma. problem polega na tym, ze wywolanie tworzenia grupy to:

set oDomain=getObject("WinNT://DOMAIN") 'lub LDAP://....
set oGrp=oDomain.create("group","groupname")
oGrp.setInfo

automatycznie tworzy to grupe globalna (security – w przypadq w2k+). ale jak zalozyc grupe domenowa lokalna [albo universalna czy dystrybucyjna w przypadq w2k+]?
co prawda ADSI definiuje obiekt 'LocalGroup’, ale jest on typu IADsGroup, ktory tworzy sie 'create(„group”,”groupname”)’… i kolko sie zamyka.

*****UPDATE 16.o3.2oo7
dzieki jednemu z czytelnikow jest rozwizanie! dzieki arturze!
rozwiazaniem jest parametr groupType ktorego nie znalalzlem, pomimo usilnych poszukiwan. i rozwiazanie, zaiste, staje sie trywialne [i dziala na NT4.o – co bylo mi potrzebne!]:

Set oDom=GetObject("WinNT://DOMAIN")

Set oGrp = oDom.create("group","grupatestowa")
oGrp.put "groupType",&H4
oGrp.setInfo

CIPA v o.5

nowa wersja skrypciq Change IP Address
– 'obsluga’ vista [polegajaca na niewyswietlaniu IPv6 (; ]
– liczne zmiany w logice skryptu
– dodana mozliwosc usuwania favsa bez koniecznosci grzebania w pliq
– dodane ustawienie IE Proxy

wszelkie informacje o bug’ach mile widziane (:

scripting games 2oo7

od 12.ii zaczyna sie konqrs organizowany przez scripting guys [if it moves – script it!]. tym razem poza satysfakcja, mozna wygrac nagrody. tym razem rowniez ciekawa zmiana – poniewaz konqrs nie bedzie tylko z vbs’a jak to mialo miejsce do tej pory, ale rowniez z powershella.