zadanie: trzeba zmienić grupy globalne na uniwersalne. zadanie o tyle nietrywialne, że grupa uniwersalna, nie może być członkiem grupy globalnej. a więc nie da się po prostu zaznaczyć wielu grup [czy też przelecieć skryptem] i zmienić ich w uniwersalne, bo posypią się błędy właśnie z takim opisem. trzeba najpierw znaleźć zagnieżdżenia i zmieniać typ 'od dołu’.[swoją drogą, to wymuszenie w Exchange 2o1o+ z grupami uniwersalnymi jest pasqdny – właśnie z powodu tego, jak trzeba się napocić z konwersją i konsekwencjami w produkcji…]
klient ma bardzo złożoną strukturę grup więc żeby sobie trochę pomóc na szybko napisałem skrypt, który rekursywnie listuje memberof… i zatrzymałem się nad głupim problemem – jak ładnie wyświetlić poziomy zagnieżdżenia? trzeba na początq wstawić jakieś spacje. szybko znalazłem funkcję 'padleft’ tylko… że nie chciała działać. krótki test typu:
echo "aaa".padlef(10)
wszystko działa. tymczasem w mojej funkcji nie chce… o co c’mon? chwilę mi zajęło zanim zwróciłem uwagę na drobny szczegół – liczba, jaką się podaje, to nie długość akapitu a długość finalnego ciągu, który chcemy uzyskać. w sumie to faktycznie – tak właśnie ma działać funkcja 'pad’! nie 'przesuwać o’ a ’przesuwać do’.
finalnie skrypt wygląda tak:
function groupDeps { ################################################################ #.Synopsis # shows group memebership with nesting to find all dependencies # helpfull i.e. before changing from Global to Universal #.Parameter Identity # function is using ActiveDirectory module's get-AdGroup. Identity # may be group Identity name od DN. ################################################################ param( [Parameter(Mandatory=$true)][string]$Identity, [int]$level=1 ) import-module ActiveDirectory $grp=get-AdGroup -Identity $Identity -properties memberof $mofnr=$grp.memberof.count #echo "group is a member of $mofnr groups" if($mofnr -ne 0) { if($?) { $str="$($grp.name) is member of:" echo $str.padLeft($str.length+(($level-1)*4)) $grp.memberof|%{ $str="-> $_" ; echo $str.padLeft($str.length+($level*4)) groupDeps $_ ($level+1) } } else { echo $error } } }
i jak zwykle najwięcej czasu poszło na pierdoły q:
eN.
MAciejM